Phần này mô tả việc lập chỉ mục cho Cloud Firestore phiên bản dành cho doanh nghiệp. Theo mặc định, phiên bản Cloud Firestore Enterprise không tạo chỉ mục nào. Để cải thiện hiệu suất cơ sở dữ liệu, hãy tạo chỉ mục cho những truy vấn thường dùng nhất.
Chỉ mục có tác động lớn đến hiệu suất của cơ sở dữ liệu. Nếu có một chỉ mục cho một truy vấn, cơ sở dữ liệu có thể trả về kết quả một cách hiệu quả bằng cách giảm lượng dữ liệu cần quét và giảm công việc cần thiết để sắp xếp kết quả. Tuy nhiên, các mục chỉ mục làm tăng chi phí lưu trữ và lượng công việc được thực hiện trong quá trình ghi trên các trường được lập chỉ mục.
Sự khác biệt giữa các phiên bản
Bảng sau đây cung cấp thông tin tổng quan về những điểm khác biệt chính về việc lập chỉ mục giữa Cloud Firestore phiên bản Chuẩn và Cloud Firestore phiên bản Doanh nghiệp.
| Tính năng | Cloud Firestore phiên bản Standard | Phiên bản Cloud Firestore Enterprise |
|---|---|---|
| Yêu cầu về việc lập chỉ mục | Tất cả các truy vấn đều cần có chỉ mục để thực thi. Các truy vấn thường hoạt động hiệu quả do yêu cầu này. | Không bắt buộc phải có chỉ mục cho các truy vấn. Có thể đọc mà không cần lập chỉ mục, giúp loại bỏ rào cản cho việc tạo mẫu. |
| Lập chỉ mục tự động | Theo mặc định, các chỉ mục một trường sẽ được tự động tạo cho tất cả các trường trong tài liệu. | Không có chỉ mục tự động. Bạn phải quản lý tất cả các chỉ mục theo cách thủ công. |
| Mật độ chỉ mục | Thưa thớt theo mặc định. Một tài liệu trong nhóm tập hợp chỉ được lập chỉ mục nếu tài liệu đó chứa giá trị cho mọi trường được lập chỉ mục. | Không thưa thớt theo mặc định. Tất cả tài liệu trong nhóm bộ sưu tập đều được lập chỉ mục.
Các trường được lập chỉ mục không có giá trị được đặt thành NULL. Bạn có thể thay đổi hành vi bằng lựa chọn chỉ mục thưa. |
| Các loại và lựa chọn chỉ mục được hỗ trợ |
|
|
Định nghĩa và cấu trúc chỉ mục
Chỉ mục bao gồm những thành phần sau:
- mã bộ sưu tập
- danh sách các trường trong bộ sưu tập đã cho
- một thứ tự (tăng dần hoặc giảm dần) cho từng trường
Chỉ mục cũng có thể bật các lựa chọn sparse hoặc unique.
Thứ tự chỉ mục
Thứ tự và hướng sắp xếp của từng trường xác định riêng chỉ mục. Ví dụ: hai chỉ mục sau đây là hai chỉ mục riêng biệt và không thể thay thế cho nhau:
| Thu thập | Trường |
|---|---|
| thành phố | quốc gia (tăng dần), dân số (giảm dần) |
| thành phố | dân số (giảm dần), quốc gia (tăng dần), |
Khi tạo chỉ mục để hỗ trợ một truy vấn, hãy thêm các trường theo cùng thứ tự như truy vấn của bạn.
Mật độ chỉ mục
Theo mặc định, các mục trong chỉ mục lưu trữ dữ liệu từ tất cả tài liệu trong một bộ sưu tập. Đây được gọi là chỉ mục không thưa. Một mục trong chỉ mục sẽ được thêm vào tài liệu, bất kể tài liệu có chứa bất kỳ trường nào được chỉ định trong chỉ mục hay không. Các trường không tồn tại được coi là có giá trị NULL khi tạo các mục chỉ mục. Để thay đổi hành vi này, bạn có thể xác định chỉ mục là chỉ mục thưa.
Chỉ mục thưa
Chỉ mục thưa thớt chỉ lập chỉ mục các tài liệu trong tập hợp có chứa một giá trị (kể cả giá trị rỗng) cho ít nhất một trong các trường được lập chỉ mục. Chỉ mục thưa giúp giảm chi phí lưu trữ và có thể cải thiện hiệu suất.
Chỉ mục duy nhất
Đặt lựa chọn chỉ mục riêng biệt để thực thi các giá trị riêng biệt cho các trường được lập chỉ mục. Đối với các chỉ mục trên nhiều trường, mỗi tổ hợp giá trị phải là duy nhất trên chỉ mục. Cơ sở dữ liệu sẽ từ chối mọi thao tác cập nhật và chèn nhằm tạo các mục chỉ mục có giá trị trùng lặp. Nếu dữ liệu của các trường được lập chỉ mục chứa các giá trị trùng lặp và bạn cố gắng tạo một chỉ mục duy nhất, thì quá trình tạo chỉ mục sẽ không thành công và xuất hiện thông báo lỗi trong phần thông tin chi tiết về thao tác.
Các trường bị thiếu trong chỉ mục duy nhất
Nếu bạn chèn một tài liệu có các trường bị thiếu cho chỉ mục duy nhất, thì chỉ mục sẽ đặt các giá trị null cho các trường bị thiếu. Mục nhập chỉ mục kết quả phải là duy nhất, nếu không, thao tác sẽ không thành công.
Ví dụ: với chỉ mục này:
| Thu thập | Các trường được lập chỉ mục | Phạm vi truy vấn |
|---|---|---|
| thành phố | tên (tăng dần) | Thu thập |
Nếu bạn thêm tài liệu {"abbreviation": "LA"} vào bộ sưu tập, chỉ mục duy nhất sẽ tạo một mục có name được đặt thành null. Nếu sau đó bạn cố gắng thêm tài liệu {"abbreviation": "NYC"}, thì thao tác sẽ không thành công vì mục nhập kết quả cho chỉ mục duy nhất là giống nhau.
Hành vi tương tự cũng áp dụng cho các chỉ mục duy nhất có nhiều trường.
Khi tạo hoặc cập nhật một tài liệu, các trường được lập chỉ mục bị thiếu sẽ được đặt thành null và mục nhập chỉ mục kết quả phải là duy nhất trong chỉ mục.
Khắc phục lỗi khi tạo chỉ mục
Bạn có thể gặp phải lỗi khi tạo chỉ mục trong quá trình quản lý chỉ mục. Thao tác lập chỉ mục có thể không thành công nếu cơ sở dữ liệu gặp vấn đề với dữ liệu. Các thao tác lập chỉ mục có thể không thành công vì những lý do sau:
- Bạn đã đạt đến giới hạn về chỉ mục. Ví dụ: thao tác có thể đã đạt đến số lượng mục nhập chỉ mục tối đa cho mỗi tài liệu. Nếu quá trình tạo chỉ mục không thành công, bạn sẽ thấy thông báo lỗi. Nếu bạn chưa đạt đến giới hạn chỉ mục, hãy thử lại thao tác lập chỉ mục.
- Bạn đặt lựa chọn chỉ mục duy nhất và dữ liệu của các trường được lập chỉ mục sẽ tạo các mục chỉ mục trùng lặp. Để tiếp tục, hãy xoá các tổ hợp giá trị trùng lặp khỏi dữ liệu.
Bước tiếp theo
Tìm hiểu cách tạo và quản lý chỉ mục.