Quá trình này mất khoảng 4 giây để thực thi cục bộ. Điều này là do Mongo phải quét toàn bộ bản ghi 100MM để xác định người dùng nào dưới 30 tuổi Show
Bây giờ, hãy thêm một chỉ mục vào trường tuổi db.getCollection('users').createIndex({age:1}) Khi chúng tôi chạy cùng một truy vấn, sẽ mất khoảng một nửa thời gian để thực hiện. Đây là lý do tại sao lập chỉ mục rất quan trọng và mạnh mẽ trong MongoDB Lập chỉ mục hoạt động như thế nào?Khi bạn tạo một chỉ mục, Mongo sẽ sao chép một phần dữ liệu bộ sưu tập thành cấu trúc dữ liệu B-Tree được sắp xếp. Cấu trúc cây được sắp xếp này cho phép tra cứu nhanh hơn. Thay vì quét toàn bộ bộ sưu tập, Mongo có thể duyệt B-Tree này để tìm dữ liệu mà nó quan tâm hiệu quả hơn Mặc dù việc lập chỉ mục có thể tạo ra những lợi ích lớn về hiệu suất, nhưng việc duy trì chỉ mục cũng phải trả phí. Khi các bản ghi được chèn vào một bộ sưu tập, chỉ mục phải được cập nhật với dữ liệu mới. Hãy nhớ rằng việc lập chỉ mục một bộ sưu tập cuối cùng sẽ làm tăng kích thước cơ sở dữ liệu của bạn Vì những lý do này, điều quan trọng là chỉ sử dụng các chỉ mục khi thích hợp. Lập chỉ mục các bộ sưu tập dựa trên các trường được truy vấn nhiều nhất là một điểm khởi đầu tốt Tạo một chỉ mục trường đơndb.getCollection('users').createIndex({age:1}) Điều này tạo ra một chỉ mục trường duy nhất trên bộ sưu tập người dùng 1 chỉ định thứ tự (tăng dần) so với -1 giảm dần Lưu ý rằng đối với một chỉ mục trường, thứ tự không thành vấn đề. Bạn sẽ nhận được những lợi ích của B-Tree được sắp xếp theo một trong hai cách. ) Khi nào bạn nên sử dụng một chỉ mục trường duy nhất?Sử dụng một chỉ mục trường duy nhất khi bạn thường xuyên truy vấn theo một trường Tạo một chỉ số hợp chấtdb.getCollection('users').createIndex({email:1, name:-1}) Điều này tạo ra một chỉ mục tổng hợp trên bộ sưu tập người dùng Điều này cực kỳ hữu ích để hỗ trợ các truy vấn như thế này db.getCollection('users').find({email:"[email protected]", name:"Sam"}) Chỉ số phức hợp này cũng có thể được tận dụng cho một truy vấn đơn giản hơn như thế này db.getCollection('users').find({email:"[email protected]"}) nhưng KHÔNG phải cái này db.getCollection('users').find({name:"Sam"}) Lý do là Mongo sử dụng tiền tố (hoặc tập hợp con đầu của các trường được lập chỉ mục). Để mở rộng này, thứ tự của các trường trong chỉ mục quan trọng. Nếu không có trường email được đưa vào truy vấn, Mongo không thể tận dụng chỉ mục phức hợp để truy vấn theo tên Chỉ mục hợp chất và sắp xếpĐiều này cực kỳ hữu ích để hỗ trợ các truy vấn sắp xếp như thế này db.getCollection('users').find().sort({email:1, name:-1}) hoặc cái này db.getCollection('users').find().sort({email:-1, name:1}) nhưng KHÔNG phải cái này db.getCollection('users').find({age:{"$lt":30}})0 và cũng KHÔNG phải cái này db.getCollection('users').find({age:{"$lt":30}})1 Điều này là do các chỉ mục chỉ có thể được tận dụng trong các hoạt động sắp xếp nếu thứ tự của các trường khớp với thứ tự của các trường được xác định trong chỉ mục. Ngoài ra, chỉ mẫu khóa chỉ mục (email. 1, tên. -1) và ngược lại (email. -1, tên. 1) có thể áp dụng cho các thao tác sắp xếp Khi nào bạn nên sử dụng một chỉ số phức hợp?Sử dụng chỉ mục tổng hợp khi bạn thường xuyên truy vấn trên nhiều trường. Ngoài ra, hãy nhớ rằng bạn không cần xác định chỉ mục trường đơn nếu chỉ mục ghép của bạn khớp với tiền tố của trường chỉ mục. hay còn gọi là db.getCollection('users').createIndex({email:1, name:-1}) cũng thỏa mãn db.getCollection('users').find({age:{"$lt":30}})3 Tạo một Multikey IndexChỉ mục đa khóa là thứ mà MongoDB tự động tạo cho bạn dựa trên các trường chứa mảng Giả sử cấu trúc tài liệu của bộ sưu tập của bạn trông như thế này db.getCollection('users').find({age:{"$lt":30}})4 nếu bạn tạo một chỉ mục trên altInfo như thế này db.getCollection('users').find({age:{"$lt":30}})5 sau đó Mongo sẽ tự động tạo một chỉ mục đa điểm Điều này cũng áp dụng cho các tài liệu phụ. Ví dụ: bạn cũng có thể tạo một chỉ mục như thế này db.getCollection('users').find({age:{"$lt":30}})6 hoặc cái này db.getCollection('users').find({age:{"$lt":30}})7 Hạn chế đối với Multikey IndexesChỉ mục nhiều phím chỉ hoạt động khi một trường trong tài liệu là một mảng Ví dụ: nếu dữ liệu của bạn trông như thế này db.getCollection('users').find({age:{"$lt":30}})8 sau đó điều này SẼ KHÔNG hoạt động db.getCollection('users').find({age:{"$lt":30}})9 Hơn nữa, nếu đã tồn tại một chỉ mục nhiều phím phức hợp và bạn cố gắng thêm một tài liệu mới với nhiều trường có mảng hơn, thao tác chèn sẽ không thành công Ví dụ: nếu bạn tạo chỉ mục tổng hợp này db.getCollection('users').createIndex({age:1})0 sau đó chèn này hoạt động db.getCollection('users').createIndex({age:1})1 và phần chèn này hoạt động db.getCollection('users').createIndex({age:1})2 nhưng KHÔNG phải cái này db.getCollection('users').createIndex({age:1})3 Hãy nhớ rằng các chỉ mục đa phím được xử lý chủ yếu ở hậu trường cho bạn. Điều quan trọng là phải hiểu khi chúng được tạo và những hạn chế mà chúng đưa ra khi chèn/truy vấn tài liệu với các trường mảng Tạo một chỉ mục văn bảndb.getCollection('users').createIndex({age:1})4 Điều này tạo ra. một chỉ mục văn bản trên trường tên. Điều này cho phép bạn chạy các tìm kiếm $text trong Mongo db.getCollection('users').createIndex({age:1})5 tìm kiếm $text là một cách ưa thích để tìm kiếm các trường chuỗi dựa trên văn bản trong Mongo. Bạn không thể chạy các truy vấn dựa trên văn bản $ mà không có chỉ mục văn bản Một bộ sưu tập chỉ có thể có một chỉ mục văn bản. Tin vui là một chỉ mục văn bản có thể bao gồm nhiều trường db.getCollection('users').createIndex({age:1})6 Khi nào bạn nên tạo một chỉ mục văn bản?Tạo một chỉ mục văn bản khi bạn muốn tìm kiếm các trường dựa trên chuỗi với $text Tạo chỉ mục ký tự đại diệndb.getCollection('users').createIndex({age:1})7 Điều này tạo ra một chỉ mục ký tự đại diện sẽ lập chỉ mục tất cả các trường con/thành phần cho một trường nhất định Chỉ số này có ý nghĩa nếu dữ liệu của bạn trông như thế này db.getCollection('users').createIndex({age:1})8 Lưu ý cách altInfo lưu trữ các thuộc tính và kiểu dữ liệu khác nhau. Đây là một lợi thế chính của thiết kế "không lược đồ" của MongoDB vì các thuộc tính có thể được thêm vào một cách nhanh chóng Khi nào bạn nên tạo chỉ mục ký tự đại diện?Tạo chỉ mục ký tự đại diện có ý nghĩa khi bạn muốn lập chỉ mục các trường có thuộc tính/phần tử phụ không được biết. Điều này hoạt động như một "bắt tất cả" để lập chỉ mục một lược đồ linh hoạt trong MongoDB Mặc dù các chỉ mục ký tự đại diện cực kỳ thuận tiện, nhưng chúng không nên được coi là một lối tắt để lập chỉ mục riêng lẻ trên các trường. Điều này là do có một chi phí hiệu suất lớn để quản lý một chỉ mục linh hoạt như vậy. Cụ thể, các bản cập nhật, đọc và xóa có thể mất nhiều thời gian hơn theo cấp số nhân khi sử dụng các chỉ mục ký tự đại diện Các loại chỉ mục khácHỗ trợ truy vấn không gian địa lýMongoDB hỗ trợ dữ liệu Không gian địa lý thông qua dữ liệu GeoJSON và các cặp tọa độ kế thừa. Dữ liệu không gian địa lý mô tả các đối tượng khi chúng liên quan đến bề mặt trái đất Chỉ mục 2dspheredb.getCollection('users').createIndex({age:1})9 Khi nào bạn nên sử dụng chỉ mục 2dsphere?Sử dụng chỉ mục 2dsphere khi bạn muốn thực hiện các truy vấn tính toán hình học trên một hình cầu giống như trái đất Chỉ mục 2ddb.getCollection('users').createIndex({age:1})0 Khi nào bạn nên sử dụng 2dIndex?Sử dụng chỉ mục 2d khi bạn muốn truy vấn dữ liệu được lưu trữ dưới dạng điểm trong mặt phẳng hai chiều chỉ mục geoHaystackdb.getCollection('users').createIndex({age:1})1 Khi nào bạn nên sử dụng chỉ mục geoHaystack?Sử dụng chỉ mục geoHaystack khi bạn muốn thực hiện các truy vấn trên dữ liệu không gian địa lý trên một khu vực vật lý nhỏ Chỉ mục bămdb.getCollection('users').createIndex({age:1})2 Khi nào bạn nên sử dụng chỉ mục băm?Sử dụng các chỉ mục được băm khi bạn muốn lập chỉ mục dữ liệu được phân vùng trên một cụm phân đoạn Phần kết luậnLập chỉ mục cơ sở dữ liệu của bạn là một trong những phần khó khăn và quan trọng nhất của thiết kế cơ sở dữ liệu phi quan hệ. Điều quan trọng là phải hiểu bản chất của ứng dụng của bạn và trường nào bạn sẽ truy vấn thường xuyên nhất khi thiết kế chiến lược lập chỉ mục của mình Mặc dù lập chỉ mục được thiết kế để giúp việc truy vấn cơ sở dữ liệu của bạn nhanh hơn, nhưng hãy nhớ rằng có một chi phí cơ hội đối với tất cả việc lưu giữ sổ sách. Điều này là do các chỉ mục phải được duy trì và cuối cùng là tăng kích thước cơ sở dữ liệu của bạn Làm cách nào để tạo nhiều chỉ mục trong MongoDB?Để tạo nhiều chỉ mục cùng một lúc, bạn cần phải sử dụng hàm createIndexes() và chuyển nhiều khóa vào một mảng .
Tôi có thể có nhiều chỉ mục trong MongoDB không?MongoDB có thể sử dụng giao điểm của nhiều chỉ mục để thực hiện truy vấn . Nói chung, mỗi giao điểm chỉ số liên quan đến hai chỉ số; .
Bộ sưu tập MongoDB có thể có bao nhiêu chỉ mục văn bản?Một bộ sưu tập có thể có tối đa một chỉ mục văn bản.
Chúng tôi có thể tạo nhiều chỉ mục trên cùng một bộ sưu tập trong MongoDB không?Bạn có thể tạo nhiều chỉ mục trên cùng một (các) khóa với các đối chiếu khác nhau . Để tạo các chỉ mục có cùng một mẫu khóa nhưng các đối chiếu khác nhau, bạn phải cung cấp các tên chỉ mục duy nhất. |