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

Thứ tự của các chỉ mục kết hợp quan trọng như thế nào trong hiệu suất MongoDB?

Redsandro,

Bạn phải xem xét Index Cardinality Selectivity .

1. Chỉ mục Cardinality

Cardinality chỉ mục đề cập đến số lượng giá trị có thể có cho một trường. Trường sex chỉ có hai giá trị có thể. Nó có bản số rất thấp . Các trường khác như tên names, usernames, phone numbers, emails , v.v. sẽ có một giá trị duy nhất cho mọi tài liệu trong bộ sưu tập, được coi là bản số cao .

  • Số lượng lớn hơn

    Số lượng của một trường càng lớn thì chỉ mục càng hữu ích, bởi vì các chỉ mục thu hẹp không gian tìm kiếm, làm cho nó trở thành một tập hợp nhỏ hơn nhiều.

    Nếu bạn có chỉ mục về sex và bạn đang tìm kiếm những người đàn ông tên John. Bạn sẽ chỉ thu hẹp không gian kết quả khoảng% 50 nếu bạn lập chỉ mục theo sex Đầu tiên. Ngược lại nếu bạn lập chỉ mục theo name , bạn sẽ ngay lập tức thu hẹp kết quả được đặt thành một phần nhỏ của người dùng có tên John, sau đó bạn sẽ tham khảo các tài liệu đó để kiểm tra giới tính.

  • Quy tắc ngón tay cái

    Cố gắng tạo chỉ mục trên high-cardinality khóa hoặc đặt high-cardinality khóa đầu tiên trong chỉ mục ghép. Bạn có thể đọc thêm về nó trong phần về chỉ mục ghép trong cuốn sách:

    MongoDB Hướng dẫn cuối cùng

2. Tính chọn lọc

Ngoài ra, bạn muốn sử dụng chỉ mục một cách chọn lọc và viết các truy vấn giới hạn số lượng tài liệu có thể có với trường được lập chỉ mục. Để giữ cho nó đơn giản, hãy xem xét bộ sưu tập sau đây. Nếu chỉ mục của bạn là {name:1} , Nếu bạn chạy truy vấn { name: "John", sex: "male"} . Bạn sẽ phải quét 1 tài liệu. Vì bạn đã cho phép MongoDB có chọn lọc.

{_id:ObjectId(),name:"John",sex:"male"}
{_id:ObjectId(),name:"Rich",sex:"male"}
{_id:ObjectId(),name:"Mose",sex:"male"}
{_id:ObjectId(),name:"Sami",sex:"male"}
{_id:ObjectId(),name:"Cari",sex:"female"}
{_id:ObjectId(),name:"Mary",sex:"female"}

Hãy xem xét bộ sưu tập sau đây. Nếu chỉ mục của bạn là {sex:1} , Nếu bạn chạy truy vấn {sex: "male", name: "John"} . Bạn sẽ phải quét 4 tài liệu.

{_id:ObjectId(),name:"John",sex:"male"}
{_id:ObjectId(),name:"Rich",sex:"male"}
{_id:ObjectId(),name:"Mose",sex:"male"}
{_id:ObjectId(),name:"Sami",sex:"male"}
{_id:ObjectId(),name:"Cari",sex:"female"}
{_id:ObjectId(),name:"Mary",sex:"female"}

Hãy tưởng tượng những khác biệt có thể có trên một tập dữ liệu lớn hơn.

Giải thích một chút về Chỉ số tổng hợp

Rất dễ tạo ra giả định sai về Chỉ số tổng hợp. Theo tài liệu của MongoDB về Chỉ số tổng hợp.

MongoDB hỗ trợ các chỉ mục phức hợp, trong đó một cấu trúc chỉ mục duy nhất giữ các tham chiếu đến nhiều trường trong các tài liệu của bộ sưu tập. Biểu đồ sau minh họa một ví dụ về chỉ mục kết hợp giữa hai trường:

Khi bạn tạo chỉ mục kết hợp, 1 Chỉ mục sẽ chứa nhiều trường. Vì vậy, nếu chúng tôi lập chỉ mục một bộ sưu tập theo {"sex" : 1, "name" : 1} , chỉ mục sẽ giống như sau:

["male","Rick"] -> 0x0c965148
["male","John"] -> 0x0c965149
["male","Sean"] -> 0x0cdf7859
["male","Bro"] ->> 0x0cdf7859
...
["female","Kate"] -> 0x0c965134
["female","Katy"] -> 0x0c965126
["female","Naji"] -> 0x0c965183
["female","Joan"] -> 0x0c965191
["female","Sara"] -> 0x0c965103

Nếu chúng tôi lập chỉ mục bộ sưu tập theo {"name" : 1, "sex" : 1} , chỉ mục sẽ giống như sau:

["John","male"] -> 0x0c965148
["John","female"] -> 0x0c965149
["John","male"] -> 0x0cdf7859
["Rick","male"] -> 0x0cdf7859
...
["Kate","female"] -> 0x0c965134
["Katy","female"] -> 0x0c965126
["Naji","female"] -> 0x0c965183
["Joan","female"] -> 0x0c965191
["Sara","female"] -> 0x0c965103

{name:1} vì Tiền tố sẽ phục vụ bạn tốt hơn nhiều trong việc sử dụng các chỉ mục ghép. Còn nhiều điều có thể đọc về chủ đề này, tôi hy vọng điều này có thể cung cấp một số thông tin rõ ràng.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kết nối MongoDB với Ruby bằng Chứng chỉ tự ký cho SSL

  2. Bộ lọc mảng Mongodb 3.6.0-rc3 không hoạt động?

  3. Xoay các hàng thành các cột trong MongoDB

  4. java.lang.NoClassDefFoundError khi sử dụng trình điều khiển MongoDB

  5. Google Cloud Platform - Không thể kết nối với mongodb