MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tại sao MongoDB không sử dụng giao điểm chỉ mục?

Khi bạn sử dụng explain(true) bạn có thể thấy rằng trình tối ưu hóa xem xét việc sử dụng giao điểm chỉ mục và chọn không:

"cursor" : "BtreeCursor Age", // Chosen plan.
...
"allPlans" : [
   {
       "cursor" : "BtreeCursor Age",
       ...
   },
   {
       "cursor" : "BtreeCursor Name",
       ...
   },
   {
       "cursor" : "Complex Plan", // Index intersection.
       ...
   }
]

MongoDB sẽ không bao giờ chọn giao điểm nếu có đủ chỉ số kết hợp. Các hạn chế khác có thể được tìm thấy trên vé Jira cho Giao lộ Chỉ mục:

Trình tối ưu hóa truy vấn có thể chọn các kế hoạch giao điểm chỉ mục khi các điều kiện sau được giữ nguyên:
1. Hầu hết các tài liệu trong bộ sưu tập có liên quan là ổ đĩa. Ưu điểm của giao điểm chỉ mục là nó có thể tránh tìm nạp tài liệu hoàn chỉnh khi kích thước của giao điểm nhỏ. Nếu các tài liệu đã được lưu trong bộ nhớ, thì không có gì có được bằng cách tránh tìm nạp.
2. Các vị từ truy vấn là các khoảng điểm đơn lẻ, chứ không phải là các vị từ phạm vi hoặc một tập hợp các khoảng. Các truy vấn trong khoảng thời gian một điểm trả về các tài liệu được sắp xếp theo vị trí đĩa, cho phép trình tối ưu hóa chọn các phương án tính toán giao lộ theo kiểu không chặn. Điều này thường nhanh hơn so với phương thức tính toán giao điểm thay thế, đó là xây dựng một bảng băm với các kết quả từ một chỉ mục và sau đó thăm dò nó với kết quả từ chỉ mục thứ hai.
3. Cả hai chỉ số được giao nhau đều không có tính chọn lọc cao. Nếu một trong các chỉ số là chọn lọc thì trình tối ưu hóa sẽ chọn một kế hoạch mà chỉ cần quét chỉ mục chọn lọc này.
4. Kích thước của giao lộ là nhỏ so với số lượng khóa chỉ mục được quét bởi một trong hai giải pháp chỉ mục đơn. Trong trường hợp này, người thực thi truy vấn có thể xem một tập hợp tài liệu nhỏ hơn bằng cách sử dụng giao điểm chỉ mục, có khả năng cho phép chúng tôi thu được lợi ích của việc tìm nạp ít hơn từ đĩa.

MongoDB có nhiều hạn chế về giao lộ khiến nó ít có khả năng được sử dụng thực sự.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Hướng dẫn truy vấn trong dữ liệu mùa xuân MongoDB

  2. MongoDB - Giải phóng mảng bằng cách sử dụng tính năng tổng hợp và loại bỏ các bản sao

  3. Điều gì đang xảy ra với Meteor và Fibers / bindEnosystem ()?

  4. Sự khác biệt giữa id và _id trong mongoose là gì?

  5. Pymongo / MongoDB:tạo chỉ mục hay đảm bảo chỉ mục?