Chúng ta có thể tạo chỉ mục trong mongodb không?

Các chỉ mục cung cấp cho người dùng một cách hiệu quả để truy vấn dữ liệu. Khi truy vấn dữ liệu không có chỉ mục, truy vấn sẽ phải tìm kiếm tất cả các bản ghi trong cơ sở dữ liệu để tìm dữ liệu khớp với truy vấn

Trong MongoDB, truy vấn không có chỉ mục được gọi là quét bộ sưu tập. Quá trình quét bộ sưu tập sẽ

  • Dẫn đến tắc nghẽn hiệu suất khác nhau
  • Làm chậm đáng kể ứng dụng của bạn

May mắn thay, việc sử dụng các chỉ mục sẽ khắc phục cả hai vấn đề này. Bằng cách giới hạn số lượng tài liệu được truy vấn, bạn sẽ tăng hiệu suất tổng thể của ứng dụng

Trong hướng dẫn này, tôi sẽ hướng dẫn bạn qua các loại chỉ mục khác nhau và chỉ cho bạn cách tạo và quản lý chỉ mục trong MongoDB

(Bài viết này là một phần của Hướng dẫn MongoDB của chúng tôi. Sử dụng menu bên phải để điều hướng. )

Chỉ mục trong MongoDB là gì?

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 Bộ sưu tập theo cách có thể truy vấn dễ dàng

Nói một cách đơn giản nhất, các chỉ mục lưu trữ các giá trị của các trường được lập chỉ mục bên ngoài bảng hoặc bộ sưu tập và theo dõi vị trí của chúng trong đĩa. Các giá trị này được sử dụng để sắp xếp các trường được lập chỉ mục. Thứ tự này giúp thực hiện khớp đẳng thức và hoạt động truy vấn dựa trên phạm vi một cách hiệu quả. Trong MongoDB, các chỉ mục được xác định ở cấp bộ sưu tập và các chỉ mục trên bất kỳ trường hoặc trường con nào của tài liệu trong bộ sưu tập đều được hỗ trợ

Đối với hướng dẫn này, chúng tôi sẽ sử dụng tập dữ liệu sau để minh họa chức năng lập chỉ mục của MongoDB

use students
db.createCollection("studentgrades")
db.studentgrades.insertMany(
    [
        {name: "Barry", subject: "Maths", score: 92},
        {name: "Kent", subject: "Physics", score: 87},
        {name: "Harry", subject: "Maths", score: 99, notes: "Exceptional Performance"},
        {name: "Alex", subject: "Literature", score: 78},
        {name: "Tom", subject: "History", score: 65, notes: "Adequate"}
    ]
)
db.studentgrades.find({},{_id:0})

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Tạo chỉ mục

Khi tạo tài liệu trong một bộ sưu tập, MongoDB sẽ tạo một chỉ mục duy nhất bằng cách sử dụng trường _id. MongoDB gọi đây là Chỉ mục _id mặc định. Chỉ mục mặc định này không thể bị xóa khỏi bộ sưu tập

Khi truy vấn tập dữ liệu thử nghiệm, bạn có thể thấy trường _id sẽ được sử dụng làm chỉ mục mặc định

db.studentgrades.find().pretty()

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Bây giờ hãy tạo một chỉ mục. Để làm điều đó, bạn có thể sử dụng phương thức createIndex theo cú pháp sau

db..createIndex(, )

Khi tạo chỉ mục, bạn cần xác định trường sẽ được lập chỉ mục và hướng của phím (1 hoặc -1) để biểu thị thứ tự tăng dần hoặc giảm dần

Một điều khác cần lưu ý là tên chỉ mục. Theo mặc định, MongoDB sẽ tạo tên chỉ mục bằng cách nối các khóa được lập chỉ mục với hướng của từng khóa trong chỉ mục bằng cách sử dụng dấu gạch dưới làm dấu phân cách. Ví dụ. {Tên. 1} sẽ được tạo với tên_1

Tùy chọn tốt nhất là sử dụng tùy chọn tên để xác định tên chỉ mục tùy chỉnh khi tạo chỉ mục. Không thể đổi tên chỉ mục sau khi tạo. (Cách duy nhất để đổi tên một chỉ mục là trước tiên bỏ chỉ mục đó, và tạo lại nó bằng tên mong muốn. )

Hãy tạo một chỉ mục bằng cách sử dụng trường tên trong bộ sưu tập studentgrades và đặt tên nó là chỉ mục tên sinh viên

db.studentgrades.createIndex(
{name: 1},
{name: "student name index"}
)

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Tìm chỉ mục

Bạn có thể tìm thấy tất cả các chỉ mục có sẵn trong bộ sưu tập MongoDB bằng cách sử dụng phương thức getIndexes. Điều này sẽ trả về tất cả các chỉ mục trong một bộ sưu tập cụ thể

db..getIndexes()

Hãy xem tất cả các chỉ mục trong bộ sưu tập studentgrades bằng lệnh sau

db.studentgrades.getIndexes()

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Đầu ra chứa chỉ mục _id mặc định và chỉ mục tên sinh viên do người dùng tạo chỉ mục

Giảm chỉ số

Để xóa một chỉ mục khỏi bộ sưu tập, hãy sử dụng phương thức dropIndex trong khi chỉ định tên chỉ mục sẽ bị xóa

db..dropIndex()

Hãy xóa chỉ mục do người dùng tạo với tên chỉ mục tên sinh viên chỉ mục, như hình bên dưới

db.studentgrades.dropIndex("student name index")

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Bạn cũng có thể sử dụng giá trị trường chỉ mục để xóa chỉ mục không có tên xác định

________số 8

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Lệnh dropIndexes cũng có thể loại bỏ tất cả các chỉ mục ngoại trừ chỉ mục _id mặc định

db.studentgrades.dropIndexes()

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Các loại chỉ mục MongoDB phổ biến

MongoDB cung cấp các loại chỉ mục khác nhau có thể được sử dụng theo nhu cầu của người dùng. Dưới đây là những cái phổ biến nhất

  • Chỉ mục trường đơn
  • chỉ số hợp chất
  • chỉ mục đa phím

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

Các chỉ mục do người dùng xác định này sử dụng một trường duy nhất trong tài liệu để tạo chỉ mục theo thứ tự sắp xếp tăng dần hoặc giảm dần (1 hoặc -1). Trong một chỉ mục trường duy nhất, thứ tự sắp xếp của khóa chỉ mục không có tác động vì MongoDB có thể duyệt qua chỉ mục theo một trong hai hướng

db.studentgrades.find().pretty()
0

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Chỉ mục trên sẽ sắp xếp dữ liệu theo thứ tự tăng dần bằng cách sử dụng trường tên. Bạn có thể sử dụng phương thức sort() để xem dữ liệu sẽ được biểu diễn như thế nào trong chỉ mục

db.studentgrades.find().pretty()
1

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

chỉ số hợp chất

Bạn có thể sử dụng nhiều trường trong tài liệu MongoDB để tạo chỉ mục phức hợp. Loại chỉ mục này sẽ sử dụng trường đầu tiên để sắp xếp ban đầu và sau đó sắp xếp theo các trường trước đó

db.studentgrades.find().pretty()
2

Chúng ta có thể tạo chỉ mục trong mongodb không?

Trong chỉ số phức hợp ở trên, MongoDB sẽ

  • Đầu tiên sắp xếp theo lĩnh vực chủ đề
  • Sau đó, trong mỗi giá trị chủ đề, hãy sắp xếp theo cấp độ

Chỉ mục sẽ tạo ra một cấu trúc dữ liệu tương tự như sau

db.studentgrades.find().pretty()
3

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

chỉ mục đa phím

MongoDB hỗ trợ lập chỉ mục các trường mảng. Khi bạn tạo một chỉ mục cho một trường chứa một mảng, MongoDB sẽ tạo các mục nhập chỉ mục riêng cho mọi phần tử trong mảng. Các chỉ mục đa khóa này cho phép người dùng truy vấn tài liệu bằng cách sử dụng các phần tử trong mảng

MongoDB sẽ tự động tạo chỉ mục đa khóa khi gặp trường mảng mà không yêu cầu người dùng xác định rõ ràng loại đa khóa

Hãy tạo tập dữ liệu mới chứa trường mảng để minh họa việc tạo chỉ mục đa khóa

db.studentgrades.find().pretty()
4

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Bây giờ, hãy tạo một chỉ mục bằng cách sử dụng trường điểm

db.studentgrades.find().pretty()
5

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Đoạn mã trên sẽ tự động tạo một Multikey index trong MongoDB. Khi bạn truy vấn tài liệu bằng trường mảng (điểm), MongoDB sẽ tìm kiếm phần tử đầu tiên của mảng được xác định trong phương thức find() và sau đó tìm kiếm toàn bộ truy vấn phù hợp

Chẳng hạn, hãy xem xét truy vấn tìm kiếm sau

db.studentgrades.find().pretty()
6

Ban đầu, MongoDB sẽ sử dụng chỉ mục đa khóa để tìm kiếm tài liệu trong đó mảng điểm chứa phần tử đầu tiên (80) ở bất kỳ vị trí nào. Sau đó, trong các tài liệu được chọn đó, các tài liệu có tất cả các thành phần phù hợp sẽ được chọn

Chúng ta có thể tạo chỉ mục trong mongodb không?

Các loại chỉ mục MongoDB khác

Ngoài các loại Chỉ mục phổ biến được đề cập ở trên, MongoDB cũng cung cấp một số loại chỉ mục đặc biệt cho các trường hợp sử dụng được nhắm mục tiêu

  • chỉ số không gian địa lý
  • chỉ số kiểm tra
  • chỉ số băm

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

MongoDB cung cấp hai loại chỉ mục để tăng hiệu quả của các truy vấn cơ sở dữ liệu khi xử lý dữ liệu tọa độ không gian địa lý

  • Các chỉ mục 2d sử dụng hình học phẳng dành cho các cặp tọa độ kế thừa được sử dụng trong MongoDB 2. 2 trở về trước
  • Chỉ mục 2dsphere sử dụng hình cầu
db.studentgrades.find().pretty()
7

mục lục văn bản

Loại chỉ mục văn bản cho phép bạn tìm kiếm nội dung chuỗi trong bộ sưu tập

db.studentgrades.find().pretty()
8

chỉ số băm

Loại chỉ mục MongoDB Hashed được sử dụng để cung cấp hỗ trợ cho chức năng. Điều này sẽ lập chỉ mục giá trị băm của trường được chỉ định

db.studentgrades.find().pretty()
9

Thuộc tính chỉ mục MongoDB

Bạn có thể nâng cao chức năng của một chỉ mục hơn nữa bằng cách sử dụng các thuộc tính chỉ mục. Trong phần này, bạn sẽ biết các thuộc tính chỉ mục thường được sử dụng này

  • chỉ số thưa thớt
  • chỉ mục một phần
  • chỉ mục duy nhất

chỉ số thưa thớt

Thuộc tính thưa MongoDB cho phép các chỉ mục bỏ qua các tài liệu lập chỉ mục trong một bộ sưu tập nếu trường được lập chỉ mục không có sẵn trong tài liệu và tạo một chỉ mục chỉ chứa các tài liệu chứa trường được lập chỉ mục

db..createIndex(, )
0

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Trong bộ sưu tập studentgrades trước, nếu bạn tạo một chỉ mục bằng cách sử dụng trường ghi chú, nó sẽ chỉ lập chỉ mục cho hai tài liệu vì trường ghi chú chỉ có trong hai tài liệu

chỉ mục một phần

Chức năng chỉ mục một phần cho phép người dùng tạo các chỉ mục phù hợp với một điều kiện lọc nhất định. Các chỉ mục một phần sử dụng tùy chọn partialFilterExpression để chỉ định điều kiện lọc

db..createIndex(, )
1

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Đoạn mã trên sẽ tạo một chỉ mục cho trường tên nhưng sẽ chỉ bao gồm các tài liệu trong đó giá trị của trường điểm lớn hơn hoặc bằng 90

chỉ mục duy nhất

Thuộc tính duy nhất cho phép người dùng tạo chỉ mục MongoDB chỉ bao gồm các giá trị duy nhất. Điều này sẽ

  • Từ chối mọi giá trị trùng lặp trong trường được lập chỉ mục
  • Giới hạn chỉ mục cho các tài liệu chứa các giá trị duy nhất
db..createIndex(, )
2

Kết quả

Chúng ta có thể tạo chỉ mục trong mongodb không?

Chỉ mục được tạo ở trên sẽ giới hạn việc lập chỉ mục cho các tài liệu có giá trị duy nhất trong trường tên

Tóm tắt chỉ mục

Điều đó kết thúc hướng dẫn lập chỉ mục MongoDB này. Bạn đã học cách tạo, tìm và loại bỏ các chỉ mục, sử dụng các loại chỉ mục khác nhau và tạo các chỉ mục phức tạp. Các chỉ mục này sau đó có thể được sử dụng để tăng cường hơn nữa chức năng của cơ sở dữ liệu MongoDB, tăng hiệu suất của các ứng dụng sử dụng các truy vấn cơ sở dữ liệu nhanh

Làm cách nào để thêm chỉ mục trong MongoDB?

Tạo một chỉ mục duy nhất trong MongoDB . Để bắt đầu, hãy chọn một cơ sở dữ liệu đã chứa các bộ sưu tập. Sau khi bạn chọn cơ sở dữ liệu, hãy sử dụng lệnh createIndex() trong trình bao để tạo một chỉ mục duy nhất .

Chúng ta có thể tạo bao nhiêu chỉ mục trong MongoDB?

Một bộ sưu tập không được có nhiều hơn 64 chỉ mục . Độ dài của tên chỉ mục không thể dài hơn 125 ký tự. Một chỉ mục phức hợp có thể có tối đa 31 trường được lập chỉ mục.

Khi nào chúng ta nên tạo chỉ mục trong MongoDB?

Nếu đôi khi bạn chỉ truy vấn một khóa và vào những thời điểm khác, truy vấn trên khóa đó kết hợp với khóa thứ hai , thì việc tạo chỉ mục phức hợp sẽ hiệu quả hơn việc tạo một khóa đơn . MongoDB sẽ sử dụng chỉ mục phức hợp cho cả hai truy vấn. Ví dụ: bạn có thể tạo chỉ mục cho cả danh mục và mục.

Chúng tôi có thể tạo nhiều chỉ mục trong MongoDB không?

MongoDB có thể sử dụng giao điểm của nhiều chỉ mục để thực hiện truy vấn . Nói chung, mỗi giao điểm chỉ số liên quan đến hai chỉ số; .