Có hai tính năng liên quan của chỉ mục cho phép tra cứu nhanh (so với thực hiện quét bộ sưu tập):
- Thứ tự các giá trị
- Mức độ gọn nhẹ của các giá trị được lập chỉ mục
Nếu bạn có các giá trị a
và b
, bạn có thể nói rằng a
đến trước b
, về mặt từ vựng. Nếu bạn có tài liệu {a: 2, b: 5}
và {b: 4, a: 3}
, không có thứ tự nào của các tài liệu này có thể đáp ứng các truy vấn điển hình. Ví dụ:nếu bạn muốn tất cả a
các giá trị được sắp xếp thì bạn có thể mong đợi 2, 3
, nhưng nếu bạn muốn b
giá trị bạn có thể mong đợi 4, 5
- yêu cầu đảo ngược thứ tự tài liệu.
Khi cơ sở dữ liệu lưu trữ chỉ mục trên đĩa, các giá trị được lưu trữ theo thứ tự chỉ mục (bất cứ điều gì có thể dành cho chỉ mục cụ thể, ví dụ:đối chiếu ảnh hưởng đến điều này). Nói chung, không có thứ tự riêng lẻ nào có thể sử dụng được cho các tài liệu thu thập, do đó các tài liệu thu thập không có thứ tự.
Khi bạn truy vấn theo chỉ mục, bạn lấy giá trị đang được tìm kiếm và về cơ bản thực hiện tìm kiếm nhị phân bằng cách sử dụng chỉ mục vì dữ liệu trong chỉ mục đã được sắp xếp.
Lý do thứ hai để sử dụng chỉ mục là, nếu bạn đang quét bộ sưu tập, đối với mỗi tài liệu, toàn bộ tài liệu thường cần được truy xuất từ đĩa và bỏ qua. Nếu bạn có bộ sưu tập 100 GB và bạn đang quét, bạn có thể cần bỏ qua hơn 100 GB dữ liệu. Nếu cùng một bộ sưu tập có chỉ mục 100 MB trên một số trường (vì chỉ mục chỉ lưu trữ các giá trị trong trường đó chứ không phải toàn bộ giá trị dữ liệu của tài liệu) và cơ sở dữ liệu thực hiện quét chỉ mục hoàn chỉnh, nó chỉ phải xem qua 100 MB của dữ liệu.
Bây giờ, cho câu hỏi của bạn về việc lưu trữ thiếu giá trị trong một chỉ mục.
Từ quan điểm của chỉ mục, "thiếu giá trị" trong các tài liệu khác nhau là cùng một giá trị. Bạn mất khả năng thực hiện tìm kiếm nhị phân khi tất cả các giá trị của bạn giống hệt nhau. Vì vậy, nếu bạn đang tìm tài liệu "thiếu giá trị" đó, chỉ mục sẽ trả lại cho bạn tất cả các tài liệu trong bộ sưu tập thiếu giá trị và sau đó bạn vẫn phải quét qua chúng để lọc theo bất kỳ điều kiện nào khác mà bạn. có. Vì điều này thường tạo ra tính chọn lọc kém nên cơ sở dữ liệu không bận tâm đến các chỉ mục và thực hiện quét thu thập ngay từ đầu.
Và, rất có thể bạn muốn một số trường khác ngoài truy vấn của mình, không phải trường không có giá trị. Vì vậy, bây giờ bạn muốn chỉ mục lưu trữ các tài liệu hoàn chỉnh, đánh bại ý tưởng nhỏ gọn.