Tối ưu hoá hiệu suất truy vấn

Chỉ áp dụng cho phiên bản Cloud Firestore Enterprise.

Để khắc phục các truy vấn chạy chậm, hãy sử dụng Query Explain để lấy kế hoạch thực thi truy vấn và hồ sơ thực thi thời gian chạy. Phần sau đây mô tả các bước bạn có thể thực hiện để tối ưu hoá hiệu suất truy vấn, tuỳ thuộc vào hồ sơ thực thi:

Giới hạn số lượng kết quả

Sử dụng trường số bản ghi được trả về trong cây thực thi để xác định xem truy vấn có trả về nhiều tài liệu hay không. Hãy cân nhắc việc giới hạn số lượng tài liệu được trả về bằng cách sử dụng mệnh đề $limit. Điều này làm giảm kích thước byte được chuyển đổi tuần tự của kết quả khi được trả về cho các ứng dụng qua mạng. Trong trường hợp nút Limit đứng trước nút MajorSort, công cụ truy vấn có thể kết hợp nút LimitMajorSort, đồng thời thay thế quá trình hiện thực hoá và sắp xếp đầy đủ trong bộ nhớ bằng một thao tác sắp xếp TopN, giúp giảm yêu cầu về bộ nhớ cho truy vấn.

Giới hạn kích thước tài liệu kết quả

Hãy cân nhắc việc giới hạn kích thước của tài liệu do $project trả về bằng cách sử dụng mệnh đề để tránh tìm nạp các trường không cần thiết. Điều này giúp giảm chi phí tính toán và bộ nhớ khi xử lý kết quả trung gian và kích thước byte được chuyển đổi tuần tự của kết quả khi được trả về cho các máy khách qua mạng. Trong trường hợp tất cả các trường được tham chiếu trong truy vấn đều được bao gồm trong một chỉ mục thông thường (không phải chỉ mục nhiều khoá), điều này cũng cho phép truy vấn được bao gồm hoàn toàn trong quá trình quét chỉ mục, tránh nhu cầu tìm nạp tài liệu từ bộ nhớ chính.

Sử dụng chỉ mục

Hãy làm theo hướng dẫn sau để thiết lập và tối ưu hoá chỉ mục.

Xác định xem truy vấn có đang sử dụng chỉ mục hay không

Bạn có thể xác định xem truy vấn có đang sử dụng chỉ mục hay không bằng cách kiểm tra các nút lá trong cây thực thi. Nếu nút lá của cây thực thi là một nút TableScan, điều đó có nghĩa là truy vấn không sử dụng chỉ mục và đang quét các tài liệu từ bộ nhớ chính. Nếu đang sử dụng một chỉ mục, nút lá của cây thực thi sẽ hiển thị mã nhận dạng chỉ mục và các trường chỉ mục của chỉ mục.

Xác định xem chỉ mục được dùng có thể được tối ưu hoá hay không

Chỉ mục sẽ hữu ích cho một truy vấn nếu chỉ mục đó có thể giảm số lượng tài liệu mà công cụ truy vấn cần tìm nạp từ bộ nhớ chính hoặc nếu thứ tự trường của chỉ mục đó có thể đáp ứng yêu cầu Sắp xếp của truy vấn.

Nếu một chỉ mục được dùng cho một truy vấn, nhưng công cụ truy vấn vẫn đang tìm nạp và loại bỏ nhiều tài liệu (như được xác định bằng một nút Scan (Quét) trả về nhiều bản ghi, sau đó là một nút Filter (Lọc) trả về ít bản ghi), thì đây là dấu hiệu cho thấy vị từ truy vấn được đáp ứng bằng chỉ mục không có tính chọn lọc. Để tạo chỉ mục phù hợp hơn, hãy xem phần Tạo chỉ mục.

Nếu một chỉ mục không có nhiều khoá được dùng cho một truy vấn, nhưng công cụ truy vấn vẫn đang thực hiện việc sắp xếp lại tập kết quả trong bộ nhớ (như được xác định bằng một nút MajorSort trong cây thực thi truy vấn), thì đây là dấu hiệu cho thấy chỉ mục được dùng không thể dùng để đáp ứng yêu cầu Sắp xếp của truy vấn. Để tạo một chỉ mục phù hợp hơn, hãy xem phần tiếp theo.

Tạo chỉ mục

Làm theo tài liệu quản lý chỉ mục để tạo chỉ mục. Để đảm bảo truy vấn của bạn có thể sử dụng chỉ mục, hãy tạo chỉ mục thông thường (không phải chỉ mục nhiều khoá) với các trường theo thứ tự sau:

  1. Tất cả các trường sẽ được dùng trong toán tử so sánh bằng. Để tối đa hoá cơ hội sử dụng lại trên các truy vấn, hãy sắp xếp các trường theo thứ tự giảm dần số lần xuất hiện của các trường trong toán tử so sánh bằng giữa các truy vấn.
  2. Tất cả các trường sẽ được sắp xếp (theo cùng một thứ tự).
  3. Các trường sẽ được dùng trong toán tử phạm vi hoặc toán tử bất đẳng thức theo thứ tự giảm dần của mức độ chọn lọc ràng buộc truy vấn.
  4. Các trường sẽ được trả về trong một truy vấn trong chỉ mục: việc đưa các trường như vậy vào chỉ mục cho phép chỉ mục bao gồm truy vấn và tránh phải tìm nạp tài liệu từ bộ nhớ chính.

Đối với những truy vấn liên quan đến việc lọc và sắp xếp các trường mảng, hãy cân nhắc việc tạo chỉ mục Multikey.

Sử dụng gợi ý truy vấn

Nếu đã tạo một chỉ mục phù hợp hơn cho truy vấn nhưng công cụ truy vấn không sử dụng chỉ mục đó, bạn có thể ghi đè lựa chọn ưu tiên chỉ mục của công cụ truy vấn bằng cách sử dụng một gợi ý truy vấn.

Để biết thêm thông tin về đầu ra của một truy vấn được thực thi bằng Query Explain, hãy xem phần Tài liệu tham khảo về việc thực thi truy vấn.