Chỉ mục là một cách điển hình để tăng tốc các truy vấn trong hệ thống cơ sở dữ liệu thông thường. Không có sự khác biệt giữa MongoDB và hệ thống cơ sở dữ liệu dựa trên tài liệu. Bài viết này cung cấp thông tin chi tiết về chỉ mục trong MongoDB, để tối ưu hóa truy vấn.
Chỉ mục trong Mongo:
Mặc định
_id là một đối tượng ObjectId, kiểu BSON 12 byte đảm bảo tính duy nhất trong bộ sưu tập. ObjectId được tạo dựa trên dấu thời gian, ID máy, ID quy trình và bộ đếm gia tăng quy trình cục bộ.
Trường đơn
Đối với chỉ mục trường đơn và các thao tác sắp xếp, thứ tự sắp xếp (tức là tăng dần hoặc giảm dần) của khóa chỉ mục không quan trọng vì MongoDB có thể duyệt chỉ mục theo một trong hai hướng. Giá trị của chỉ mục là loại chỉ mục. Ví dụ:1 biểu thị thứ tự tăng dần và -1 chỉ định thứ tự giảm dần.
db.friends.createIndex( { "name" : 1 } )
Trường kết hợp
Thứ tự của các trường được liệt kê trong một chỉ mục kết hợp có ý nghĩa. Ví dụ:nếu một chỉ mục kết hợp bao gồm {userid:1, score:-1}, thì chỉ số này sẽ sắp xếp trước tiên theo userid và sau đó, trong mỗi giá trị userid, sắp xếp theo điểm.
db.products.createIndex( { "item": 1, "stock": 1 } )
Nhiều khóa
MongoDB sử dụng nhiều chỉ mục để lập chỉ mục nội dung trong một mảng. MongoDB tạo các mục nhập chỉ mục riêng biệt cho mọi phần tử của mảng. Bạn không cần tạo nhiều khóa một cách rõ ràng.
Chỉ mục văn bản
Một bộ sưu tập có thể có nhiều nhất một chỉ mục văn bản.
Chi phí hiệu suất cho chỉ mục văn bản:
chỉ mục văn bản có thể lớn. Chúng chứa một mục nhập chỉ mục cho mỗi từ có gốc sau duy nhất trong mỗi trường được lập chỉ mục cho mỗi tài liệu được chèn vào.
chỉ mục văn bản sẽ ảnh hưởng đến thông lượng chèn vì MongoDB phải thêm mục nhập chỉ mục cho mỗi từ có gốc sau duy nhất trong mỗi trường được lập chỉ mục của mỗi tài liệu nguồn mới.
db.reviews.createIndex( { comments: "text" } )
Chỉ mục băm
Nội dung truy vấn theo giá trị băm của nó. Hàm băm là một hàm được tính theo giá trị của nó. Giá trị băm được thiết kế để trở thành giá trị khác biệt. Một ưu điểm là nó rất nhanh, lấy O (1) nhiều nhất nhưng theo hợp đồng, cây tìm kiếm nhị phân thông thường sẽ lấy O (Log (N)). Về mặt lý thuyết, băm sẽ nhanh hơn so với thực hiện cây tìm kiếm nhị phân thông thường. Nhưng nhược điểm là chỉ số băm thực hiện tìm kiếm phạm vi sẽ cực kỳ chậm hơn so với chỉ mục bình thường.
Đây là một ví dụ trong python để tạo chỉ mục băm
db.active.createIndex( { a: "hashed" } )