Chỉ mục rất quan trọng trong bất kỳ cơ sở dữ liệu nào và với MongoDB thì không khác gì. Với việc sử dụng Chỉ mục, việc thực hiện các truy vấn trong MongoDB trở nên hiệu quả hơn.
Nếu bạn có một bộ sưu tập với hàng nghìn tài liệu không có chỉ mục và sau đó bạn truy vấn để tìm một số tài liệu nhất định, thì trong trường hợp đó MongoDB sẽ cần quét toàn bộ bộ sưu tập để tìm tài liệu. Nhưng nếu bạn có các chỉ mục, MongoDB sẽ sử dụng các chỉ mục này để giới hạn số lượng tài liệu phải được tìm kiếm trong bộ sưu tập.
Chỉ mục là tập dữ liệu đặc biệt lưu trữ một phần dữ liệu của bộ sưu tập. Vì dữ liệu là một phần, nên việc đọc dữ liệu này trở nên dễ dàng hơn. Tập hợp từng phần này lưu trữ giá trị của một trường cụ thể hoặc một tập hợp các trường được sắp xếp theo giá trị của trường.
Trong hướng dẫn này, bạn sẽ học -
- Hiểu tác động của chỉ mục
- Cách tạo chỉ mục: createIndex ()
- Cách tìm chỉ mục: getindexes ()
- Cách giảm chỉ mục: dropindex ()
Hiểu tác động của chỉ mục
Bây giờ, mặc dù từ phần giới thiệu, chúng ta đã thấy rằng các chỉ mục là tốt cho các truy vấn, nhưng có quá nhiều chỉ mục có thể làm chậm các hoạt động khác như thao tác Chèn, Xóa và Cập nhật.
Nếu thường xuyên có các hoạt động chèn, xóa và cập nhật được thực hiện trên tài liệu, thì các chỉ mục sẽ cần phải thay đổi thường xuyên, điều này sẽ chỉ là một chi phí cho bộ sưu tập.
Ví dụ dưới đây cho thấy một ví dụ về những giá trị trường nào có thể tạo thành một chỉ mục trong một tập hợp. Chỉ mục có thể chỉ dựa trên một trường trong tập hợp hoặc có thể dựa trên nhiều trường trong tập hợp.
Trong ví dụ dưới đây, Employeeid "1" và EmployeeCode "AA" được sử dụng để lập chỉ mục các tài liệu trong bộ sưu tập. Vì vậy, khi một tìm kiếm truy vấn được thực hiện, các chỉ mục này sẽ được sử dụng để tìm nhanh chóng và hiệu quả các tài liệu cần thiết trong bộ sưu tập.
Vì vậy, ngay cả khi truy vấn tìm kiếm dựa trên Mã nhân viên "AA", tài liệu đó sẽ được trả về.
Cách tạo chỉ mục: createIndex ()
Tạo một Chỉ mục trong MongoDB được thực hiện bằng cách sử dụng phương thức " createIndex ".
Ví dụ sau đây cho thấy cách thêm chỉ mục vào bộ sưu tập. Giả sử rằng chúng ta có cùng một tập hợp Nhân viên có tên Trường là "Employeeid" và "EmployeeName".
db.Employee.createIndex({Employeeid:1})
Giải thích mã:
- Phương thức createIndex được sử dụng để tạo chỉ mục dựa trên "Employeeid" của tài liệu.
- Tham số '1' chỉ ra rằng khi chỉ mục được tạo bằng các giá trị Trường "Employeeid", chúng phải được sắp xếp theo thứ tự tăng dần. Xin lưu ý rằng trường này khác với trường _id (Trường id được sử dụng để xác định duy nhất từng tài liệu trong bộ sưu tập) được tạo tự động trong bộ sưu tập bởi MongoDB. Các tài liệu bây giờ sẽ được sắp xếp theo Employeeid chứ không phải trường _id.
Nếu lệnh được thực hiện thành công, đầu ra sau sẽ được hiển thị:
Đầu ra:
- NumIndexesBefore: 1 cho biết số lượng giá trị Trường (Các trường thực tế trong bộ sưu tập) đã có trong các chỉ mục trước khi lệnh được chạy. Hãy nhớ rằng mỗi bộ sưu tập có trường _id cũng được tính là một giá trị Trường cho chỉ mục. Vì trường chỉ mục _id là một phần của tập hợp khi nó được tạo ban đầu, nên giá trị của numIndexesBefore là 1.
- NumIndexesAfter: 2 cho biết số lượng giá trị Trường đã có trong các chỉ mục sau khi lệnh được chạy.
- Ở đây, đầu ra "ok: 1" chỉ định rằng thao tác đã thành công và chỉ mục mới được thêm vào bộ sưu tập.
Đoạn mã trên cho thấy cách tạo chỉ mục dựa trên một giá trị trường, nhưng người ta cũng có thể tạo chỉ mục dựa trên nhiều giá trị trường.
Ví dụ sau đây cho thấy điều này có thể được thực hiện như thế nào;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
Giải thích mã:
- Phương thức createIndex bây giờ tính đến nhiều giá trị Trường mà bây giờ sẽ tạo chỉ mục dựa trên "Employeeid" và "EmployeeName". Employeeid: 1 và EmployeeName: 1 chỉ ra rằng chỉ mục nên được tạo trên 2 giá trị trường này với: 1 cho biết rằng nó phải theo thứ tự tăng dần.
Cách tìm chỉ mục: getindexes ()
Tìm một Chỉ mục trong MongoDB được thực hiện bằng cách sử dụng phương thức "getIndexes" .
Ví dụ sau đây cho thấy điều này có thể được thực hiện như thế nào;
db.Employee.getIndexes()
Giải thích mã:
- Phương thức getIndexes được sử dụng để tìm tất cả các chỉ mục trong một tập hợp.
Nếu lệnh được thực hiện thành công, đầu ra sau sẽ được hiển thị:
Đầu ra:
- Đầu ra trả về một tài liệu chỉ cho thấy rằng có 2 chỉ mục trong bộ sưu tập là trường _id và chỉ mục kia là trường id của nhân viên. : 1 chỉ ra rằng các giá trị trường trong chỉ mục được tạo theo thứ tự tăng dần.
Cách giảm chỉ mục: dropindex ()
Loại bỏ một Chỉ mục trong MongoDB được thực hiện bằng cách sử dụng phương thức dropIndex.
Ví dụ sau đây cho thấy điều này có thể được thực hiện như thế nào;
db.Employee.dropIndex(Employeeid:1)
Giải thích mã:
- Phương thức dropIndex nhận các giá trị Trường bắt buộc cần được xóa khỏi Chỉ mục.
Nếu lệnh được thực hiện thành công, đầu ra sau sẽ được hiển thị:
Đầu ra:
- NIndexesWas: 3 cho biết số lượng giá trị Trường đã có trong các chỉ mục trước khi lệnh được chạy. Hãy nhớ rằng mỗi bộ sưu tập có trường _id cũng được tính là một giá trị Trường cho chỉ mục.
- Đầu ra ok: 1 chỉ định rằng thao tác đã thành công và trường "Employeeid" bị xóa khỏi chỉ mục.
Để loại bỏ tất cả các chỉ mục cùng một lúc trong bộ sưu tập, người ta có thể sử dụng lệnh dropIndexes.
Ví dụ sau đây cho thấy điều này có thể được thực hiện như thế nào.
db.Employee.dropIndex()
Giải thích mã:
- Phương thức dropIndexes sẽ loại bỏ tất cả các chỉ mục ngoại trừ chỉ mục _id.
Nếu lệnh được thực hiện thành công, đầu ra sau sẽ được hiển thị:
Đầu ra:
- NIndexesWas: 2 cho biết số lượng giá trị Trường đã có trong các chỉ mục trước khi lệnh được chạy.
- Hãy nhớ lại rằng mỗi bộ sưu tập có trường _id cũng được tính là giá trị Trường đối với chỉ mục và điều đó sẽ không bị MongoDB loại bỏ và đó là thông báo này chỉ ra.
- Đầu ra ok: 1 xác định rằng hoạt động đã thành công.
Tóm lược
- Việc xác định các chỉ mục rất quan trọng để tìm kiếm nhanh hơn và hiệu quả các tài liệu trong một bộ sưu tập.
- Chỉ mục có thể được tạo bằng cách sử dụng phương thức createIndex. Chỉ mục có thể được tạo chỉ trên một trường hoặc nhiều giá trị trường.
- Các chỉ mục có thể được tìm thấy bằng cách sử dụng phương thức getIndexes.
- Chỉ mục có thể được xóa bằng cách sử dụng dropIndex cho các chỉ mục đơn lẻ hoặc dropIndexes để loại bỏ tất cả các chỉ mục.