MongoDB (6) - Chỉ mục

Bài trước: MongoDB (5) - Thao tác tài liệu

Tài liệu tham khảo: Sổ tay MongoDB

1. Khái niệm cơ bản về chỉ mục

Chỉ mục giúp MongoDB thực hiện truy vấn hiệu quả. Khi không có chỉ mục, MongoDB phải quét toàn bộ tập hợp để tìm tài liệu phù hợp. Nếu có chỉ mục phù hợp, MongoDB chỉ cần kiểm tra một phần nhỏ các tài liệu.

Chỉ mục là cấu trúc dữ liệu đặc biệt lưu trữ một phần nhỏ dữ liệu của tập hợp, được sắp xếp theo thứ tự dễ dàng duyệt. Chỉ mục hỗ trợ truy vấn so sánh bằng và phạm vi, đồng thời trả về kết quả đã sắp xếp nhờ thứ tự trong chỉ mục.

Khi tạo tài liệu, MongoDB tự động thêm trường _id với chỉ mục duy nhất để tránh trùng lặp. MongoDB sử dụng cấu trúc dữ liệu B-Cây cho chỉ mục, khác với B+Cây trong MySQL.

MongoDB sử dụng cấu trúc dữ liệu B-Cây cho chỉ mục, trong khi MySQL sử dụng B+Cây

2. Tạo chỉ mục

Cú pháp: db.tập_hợp.tạoChỉMục(keys, tùy_chọn)

Các tùy chọn có thể sử dụng:

**Tham số** **Kiểu** **Mô tả**
background Boolean Tạo chỉ mục ở chế độ nền để tránh chặn các thao tác khác. Mặc định là **false**.
duy_nhất Boolean Tạo chỉ mục duy nhất. Mặc định là **false**.
tên string Tên chỉ mục. Nếu không cung cấp, MongoDB sẽ tự động tạo tên từ trường và thứ tự sắp xếp.
sparse Boolean Bỏ qua các tài liệu không có trường này. Mặc định là **false**.
hết_hạn_sau số nguyên Thiết lập thời gian sống cho chỉ mục tính bằng giây.
trọng_số tài_liệu Điểm trọng số cho các trường trong chỉ mục (1-99,999).
ngôn_ngữ_mặc_định string Ngôn ngữ cho chỉ mục văn bản, mặc định là tiếng Anh.

3. Phân loại chỉ mục

3.1 Chỉ mục đơn trường

Tạo chỉ mục cho một trường cụ thể.

Cú pháp: db.tập_hợp.tạoChỉMục({trường:1}) // 1 là tăng dần, -1 là giảm dần

3.2 Chỉ mục phức hợp

Tạo chỉ mục cho nhiều trường cùng lúc.

Cú pháp: db.tập_hợp.đảm_đáoChỉMục({trường1:1, trường2:-1}) // Tạo chỉ mục cho trường1 và trường2

3.3 Chỉ mục duy nhất

Đảm bảo giá trị trường trong tài liệu là duy nhất.

Cú pháp: db.tập_hợp.đảm_đáoChỉMục({trường:1}, {duy_nhất: true})

3.4 Chỉ mục hết hạn

Xóa dữ liệu khi chỉ mục hết hiệu lực.

Cú pháp: db.tập_hợp.đảm_đáoChỉMục({thời_gian:1}, {hết_hạn_sau: 30}) // Hết hạn sau 30 giây

Giá trị thời_gian phải là kiểu ISODate, nếu không dữ liệu sẽ không bị xóa.

3.5 Chỉ mục không gian địa lý

3.5.1 Chỉ mục 2D

Phù hợp cho bản đồ phẳng như trò chơi, gây méo mó ở cực nếu dùng cho bề mặt cầu.

3.5.2 Chỉ mục 2Dsphere

Hỗ trợ bản đồ Trái Đất với định dạng GeoJSON (điểm, đường, đa giác).

4. Xem chỉ mục

Hiển thị tất cả chỉ mục trong tập hợp:

Cú pháp: db.tập_hợp.lấyChỉMục()

phiên_bản: phiên bản engine chỉ mục khóa: trường được chỉ mục tên: tên chỉ mục (mặc định là tên trường + thứ tự) không_gian: vị trí chỉ mục (cơ_sở_dữ_liệu.tập_hợp)

5. Xóa chỉ mục

5.1 Xóa chỉ mục cụ thể
Cú pháp: db.tập_hợp.xóaChỉMục(tên_chỉ_mục)

Xóa chỉ mục bằng tên.

5.2 Xóa tất cả chỉ mục

Lưu ý: Chỉ mục _id sẽ không bị xóa.

Cú pháp: db.tập_hợp.xóaTấtCảChỉMục()

6. Kiểm tra hiệu suất chỉ mục

Sử dụng lệnh sau để xác nhận chỉ mục có hoạt động:

db.tập_hợp.tìm(truy_vấn, tùy_chọn).giải_thích(tùy_chọn)

Ví dụ: Kiểm tra chỉ mục trên trường mã_số trong tập hợp sinh_viên:

db.sinh_viên.tìm({mã_số: "123"}).giải_thích()

Nếu kết quả hiển thị LẤY_DỮ LIỆU thì đang dùng chỉ mục. Nếu là QUÉT_TẬP_HỢP thì chưa dùng chỉ mục.

Lưu ý: Nếu trường truy vấn trùng với chỉ mục, MongoDB sẽ lấy dữ liệu trực tiếp từ chỉ mục, không cần truy cập tập hợp.

Bài tiếp theo: MongoDB (7) - Tạo tập sao chép

Thẻ: MongoDB chỉ_mục cấu_trúc_dữ_liệu_B-Cây truy_vấn_cơ_sở_dữ_liệu

Đăng vào ngày 16 tháng 7 lúc 22:46