MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

3 cách để ẩn một chỉ mục khỏi kế hoạch truy vấn trong MongoDB

Bắt đầu từ MongoDB 4.4, bây giờ chúng ta có thể ẩn các chỉ mục khỏi kế hoạch truy vấn. Điều này cho phép chúng tôi đánh giá tác động tiềm ẩn của việc giảm chỉ số mà không thực sự giảm chỉ mục.

Nếu ẩn nó có tác động tiêu cực, chúng tôi có thể bỏ ẩn chỉ mục. Điều này giúp chúng tôi không phải bỏ chỉ mục, sau đó tạo lại chỉ mục.

Dưới đây là 3 cách để ẩn một chỉ mục trong MongoDB.

hideIndex() Phương pháp

db.collection.hideIndex() phương thức thực hiện chính xác như những gì nó hứa hẹn - nó ẩn chỉ mục (khỏi trình lập kế hoạch truy vấn).

Ví dụ:

db.pets.hideIndex("idx_weight_-1")

Đầu ra:

{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }

Điều đó ẩn một chỉ mục có tên là idx_weight_-1 trên pets thu thập. Theo cách khác, chúng tôi có thể cung cấp mẫu khóa cho chỉ mục thay vì tên.

Đầu ra của hideIndex() phương thức hiển thị giá trị cũ cho hidden trường (trong trường hợp này là false ) và giá trị mới (trong trường hợp này là true ).

Tuy nhiên, nếu chúng tôi ẩn một chỉ mục đã bị ẩn (hoặc hiện một chỉ mục đã bị ẩn), những chỉ mục này sẽ không được hiển thị và chúng tôi chỉ nhận được những điều sau:

{ "ok" : 1 }

Trong mọi trường hợp, chỉ mục hiện bị ẩn.

hideIndex() phương thức thực sự là một trình bao bọc cho collMod lệnh quản trị (bên dưới).

collMod Lệnh

collMod lệnh quản trị cho phép chúng tôi thêm các tùy chọn vào một bộ sưu tập hoặc sửa đổi các định nghĩa chế độ xem.

Chúng tôi có thể sử dụng nó để ẩn một chỉ mục bằng cách chuyển hidden: true .

Ví dụ:

db.runCommand( {
   collMod: "pets",
   index: {
      name: "idx_weight_-1",
      hidden: true
   }
} )

Kết quả:

{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }

Điều này trả về cùng một tài liệu hideIndex() lợi nhuận.

Tương tự với hideIndex() , bạn có tùy chọn chỉ định tên chỉ mục hoặc mẫu khóa của nó.

Dưới đây là một ví dụ về việc sử dụng mẫu khóa:

db.runCommand( {
   collMod: "pets",
   index: {
      keyPattern: { weight : -1 },
      hidden: true
   }
} )

Trong trường hợp này, chỉ mục được xác định bằng cách sử dụng { weight : -1 } và do đó định nghĩa này có thể được sử dụng thay cho tên chỉ mục.

Để xác minh điều này, chúng tôi có thể sử dụng getIndexes() để xem định nghĩa của chỉ mục:

db.pets.getIndexes()

Kết quả:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"weight" : -1
		},
		"name" : "idx_weight_-1",
		"hidden" : true
	}
]

Chúng tôi cũng có thể hiện chỉ mục bằng cách chuyển hidden: false .

Tạo chỉ mục ẩn

Cách thứ ba để ẩn một chỉ mục là tạo nó dưới dạng một chỉ mục ẩn.

Để thực hiện việc này, hãy sử dụng hidden: true là một trong những tùy chọn khi bạn tạo chỉ mục.

Ví dụ:

db.pets.createIndex( 
    { type: 1 },
    { hidden: true }
)

Đầu ra:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 2,
	"numIndexesAfter" : 3,
	"ok" : 1
}

Bây giờ chúng ta hãy gọi getIndexes() một lần nữa để kiểm tra chỉ mục ẩn mới được tạo của chúng tôi:

db.pets.getIndexes()

Kết quả:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"weight" : -1
		},
		"name" : "idx_weight_-1",
		"hidden" : true
	},
	{
		"v" : 2,
		"hidden" : true,
		"key" : {
			"type" : 1
		},
		"name" : "type_1"
	}
]

Chúng ta có thể thấy rằng nó đã được tạo bằng "hidden": true .

Không thể ẩn chỉ mục? Kiểm tra Cài đặt này.

mongod featureCompatibilityVersion ít nhất phải là 4.4 trước khi bạn có thể ẩn các chỉ mục. Tuy nhiên, sau khi bị ẩn, chỉ mục sẽ vẫn bị ẩn ngay cả với featureCompatibilityVersion đặt thành 4.2 trên tệp nhị phân MongoDB 4.4.

Bạn có thể kiểm tra featureCompatibilityVersion cài đặt bằng mã sau:

db.adminCommand( 
    { 
        getParameter: 1, 
        featureCompatibilityVersion: 1 
    } 
)

Bạn có thể đặt nó bằng setFeatureCompatibilityVersion lệnh:

db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

setFeatureCompatibilityVersion lệnh cần được chạy trong admin cơ sở dữ liệu.

Cũng lưu ý, bạn không thể ẩn _id chỉ mục.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. SQL RPAD ()

  2. Làm cách nào để xóa các bản sao dựa trên một khóa trong Mongodb?

  3. MongoDB $ toDate

  4. MongoDB:Thời gian chờ xảy ra sau 30000 mili giây chọn máy chủ bằng CompositeServerSelector

  5. 10 tính năng hàng đầu của MongoDB Atlas