Tại sao lập chỉ mục
Hiểu hai điểm chính.
- Trong khi một chỉ mục tốt hơn không có chỉ mục, chỉ mục chính xác tốt hơn nhiều.
- MongoDB sẽ chỉ sử dụng một chỉ mục cho mỗi truy vấn, tạo chỉ mục ghép với thứ tự trường thích hợp những gì bạn có thể muốn sử dụng.
Chỉ mục không miễn phí. Họ chiếm bộ nhớ và áp dụng hình phạt hiệu suất khi thực hiện chèn, cập nhật và xóa. Thông thường, lần truy cập hiệu suất là không đáng kể (đặc biệt là so với tăng hiệu suất đọc), nhưng điều đó không có nghĩa là chúng ta không thể thông minh trong việc tạo chỉ mục của mình.
Cách lập chỉ mục
Việc xác định nhóm trường nào nên được lập chỉ mục với nhau là hiểu các truy vấn mà bạn đang chạy. Thứ tự của các trường được sử dụng để tạo chỉ mục của bạn là rất quan trọng. Tin tốt là, nếu bạn đặt sai thứ tự, chỉ mục sẽ không được sử dụng, vì vậy sẽ dễ dàng phát hiện ra bằng cách giải thích.
Tại sao lại sắp xếp
Các truy vấn của bạn có thể cần Sắp xếp. Nhưng sắp xếp có thể là một hoạt động tốn kém, vì vậy điều quan trọng là phải coi các trường bạn đang sắp xếp giống như trường mà bạn đang truy vấn. Vì vậy, nó sẽ nhanh hơn nếu nó có chỉ mục. Tuy nhiên, có một điểm khác biệt quan trọng, trường mà bạn sắp xếp phải là trường cuối cùng trong chỉ mục của bạn. Ngoại lệ duy nhất cho quy tắc này là nếu trường cũng là một phần của truy vấn của bạn, thì quy tắc phải là cuối cùng không áp dụng.
Cách sắp xếp
Bạn có thể chỉ định một sắp xếp trên tất cả các khóa của chỉ mục hoặc trên một tập hợp con; tuy nhiên, các khóa sắp xếp phải được liệt kê theo thứ tự khi chúng xuất hiện trong chỉ mục. Ví dụ: mẫu khóa chỉ mục {a: 1, b: 1} có thể hỗ trợ sắp xếp trên {a: 1, b: 1} nhưng không hỗ trợ trên {b: 1, a: 1}.
Việc sắp xếp phải chỉ định cùng một hướng sắp xếp (tức là tăng dần / giảm dần) cho tất cả các khóa của nó làm mẫu khóa chỉ mục hoặc chỉ định hướng sắp xếp ngược cho tất cả các khóa của nó làm mẫu khóa chỉ mục. Ví dụ: mẫu khóa chỉ mục {a: 1, b: 1} có thể hỗ trợ sắp xếp trên {a: 1, b: 1} và {a: -1, b: -1} nhưng không hỗ trợ trên {a: -1 , b: 1}.
Giả sử có các chỉ mục sau:
{ a: 1 }
{ a: 1, b: 1 }
{ a: 1, b: 1, c: 1 }
Example Index Used
db.data.find().sort( { a: 1 } ) { a: 1 }
db.data.find().sort( { a: -1 } ) { a: 1 }
db.data.find().sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: -1, b: -1 } ) { a: 1, b: 1 }
db.data.find().sort( { a: 1, b: 1, c: 1 } ) { a: 1, b: 1, c: 1 }
db.data.find( { a: { $gt: 4 } } ).sort( { a: 1, b: 1 } ) { a: 1, b: 1 }
1, 3, 2, 6, 5, 4, 7
?