MongoDB Hướng dẫn lập chỉ mục – Ví dụ createIndex(), dropindex()

Các chỉ mục rất quan trọng trong bất kỳ cơ sở dữ liệu nào và với MongoDB nó 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ó 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 tìm kiếm trong bộ sưu tập.

Chỉ mục là các 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 một 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.

Hiểu tác động của chỉ số

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 rất tốt cho các truy vấn, nhưng việc 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 các thao tác chèn, xóa và cập nhật được thực hiện thường xuyê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ỉ gây tốn kém cho bộ sưu tập.

Ví dụ dưới đây cho thấy ví dụ về giá trị trường nào có thể tạo thành chỉ mục trong bộ sưu tập. Một chỉ mục có thể chỉ dựa trên một trường trong bộ sưu tập hoặc có thể dựa trên nhiều trường trong bộ sưu tập.

Trong ví dụ bên dưới, Mã nhân viên “1” và Mã nhân viên “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 thực hiện tìm kiếm truy vấn, các chỉ mục này sẽ được sử dụng để tìm kiếm các tài liệu cần thiết trong bộ sưu tập một cách nhanh chóng và hiệu quả.

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ề.

Hiểu tác động của chỉ số

Cách tạo chỉ mục: createIndex()

Tạo chỉ mục trong MongoDB được thực hiện bằng cách sử dụng “tạo chỉ mục" phương pháp.

Ví dụ sau đây cho thấy cách thêm chỉ mục vào bộ sưu tập. Giả sử chúng ta có cùng bộ sưu tập Employee có tên Trường là “Employeeid” và “EmployeeName”.

Tạo chỉ mục: createIndex()

db.Employee.createIndex({Employeeid:1})

Giải thích mã:

  1. tạo chỉ mục phương thức được sử dụng để tạo chỉ mục dựa trên “Employeeid” của tài liệu.
  2. Tham số '1' cho biết rằng khi chỉ mục được tạo bằng các giá trị Trường "Nhân viên", 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 để nhận dạng 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. Bây giờ các tài liệu sẽ được sắp xếp theo trường Nhân viên chứ không phải trường _id.

Nếu lệnh được thực hiện thành công, kết quả đầu ra sau sẽ được hiển thị:

Đầu ra:

Tạo chỉ mục: createIndex()

  1. 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 chỉ mục trước khi lệnh được chạy. Hãy nhớ rằng mỗi bộ sưu tập đều có trường _id cũng được tính là giá trị Trường cho chỉ mục. Vì trường chỉ mục _id là một phần của bộ sưu tập khi nó được tạo lần đầu nên giá trị của numIndexesBefore là 1.
  2. numIndexesAfter: 2 cho biết số lượng giá trị Trường có trong chỉ mục sau khi lệnh được chạy.
  3. Ở đâ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 cách thực hiện điều này;

Tạo chỉ mục: createIndex()

db.Employee.createIndex({Employeeid:1, EmployeeName:1])

Giải thích mã:

  • Phương thức createIndex hiện tính đến nhiều giá trị Trường, điều này sẽ khiến chỉ mục được tạo dựa trên “Employeeid” và “EmployeeName”. Mã nhân viên:1 và Tên nhân viên: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 chỉ mục đó phải theo thứ tự tăng dần.

Cách tìm chỉ mục: getindexes()

Tìm chỉ mục trong MongoDB được thực hiện bằng cách sử dụng “lấy chỉ mục” phương pháp.

Ví dụ sau đây cho thấy cách thực hiện điều này;

Tìm chỉ mục: getindexes()

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 bộ sưu tập.

Nếu lệnh được thực hiện thành công, kết quả đầu ra sau sẽ được hiển thị:

Đầu ra:

Tìm chỉ mục: getindexes()

  • Đầu ra trả về một tài liệu chỉ hiển thị rằng có 2 chỉ mục trong bộ sưu tập là trường _id và chỉ mục còn lại là trường ID 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 bỏ chỉ mục: dropindex()

Xóa 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 cách thực hiện điều này;

Thả chỉ mục: dropindex()

db.Employee.dropIndex(Employeeid:1)

Giải thích mã:

  • Phương thức dropIndex lấy 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, kết quả đầu ra sau sẽ được hiển thị:

Đầu ra:

Thả chỉ mục: dropindex()

  1. nIndexesWas: 3 cho biết số lượng giá trị Trường có trong chỉ mục trước khi lệnh được chạy. Hãy nhớ rằng mỗi bộ sưu tập đều có trường _id cũng được tính là giá trị Trường cho chỉ mục.
  2. Đầu ra ok: 1 chỉ định rằng thao tác đã thành công và trường “Nhân viên” bị xóa khỏi chỉ mục.

Để xóa tất cả các chỉ mục trong bộ sưu tập cùng một lúc, người ta có thể sử dụng lệnh dropIndexes.

Ví dụ sau đây cho thấy cách thực hiện điều này.

Thả chỉ mục: dropindex()

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, kết quả đầu ra sau sẽ được hiển thị:

Đầu ra:

Thả chỉ mục: dropindex()

  1. nIndexesWas: 2 cho biết số lượng giá trị Trường có trong chỉ mục trước khi lệnh được chạy.
  2. 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 cho chỉ mục và trường đó sẽ không bị xóa bởi MongoDB và đó là những gì thông báo này chỉ ra.
  3. Đầu ra ok: 1 xác định rằng thao tác đã thành công.

Tổng kết

  • Việc xác định chỉ mục rất quan trọng để tìm kiếm tài liệu trong một bộ sưu tập nhanh hơn và hiệu quả hơn.
  • 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.
  • Các chỉ mục có thể được loại bỏ 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.

Tóm tắt bài viết này với: