sql >> Databáze >  >> NoSQL >> MongoDB

3 způsoby, jak skrýt index z plánu dotazů v MongoDB

Počínaje MongoDB 4.4 nyní můžeme skrýt indexy z plánu dotazů. To nám umožňuje vyhodnotit potenciální dopad vypuštění indexu, aniž bychom index skutečně vypustili.

Pokud má jeho skrytí negativní dopad, můžeme index odkrýt. To nám ušetří nutnost rušit index a poté jej znovu vytvářet.

Níže jsou uvedeny 3 způsoby, jak skrýt index v MongoDB.

hideIndex() Metoda

db.collection.hideIndex() metoda dělá přesně to, co slibuje – skryje index (z plánovače dotazů).

Příklad:

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

Výstup:

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

To skrývá index nazvaný idx_weight_-1 na pets sbírka. Alternativně bychom mohli místo názvu poskytnout vzor klíče pro index.

Výstup hideIndex() metoda zobrazí starou hodnotu pro hidden pole (v tomto případě false ) a novou hodnotu (v tomto případě true ).

Pokud však skryjeme již skrytý index (nebo odkryjeme již skrytý index), tyto se nezobrazí a dostaneme pouze následující:

{ "ok" : 1 }

V každém případě je index nyní skrytý.

hideIndex() metoda je ve skutečnosti obal pro collMod administrační příkaz (níže).

collMod Příkaz

collMod administrační příkaz nám umožňuje přidávat možnosti do kolekce nebo upravovat definice zobrazení.

Můžeme jej použít ke skrytí indexu předáním hidden: true .

Příklad:

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

Výsledek:

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

To vrátí stejný dokument jako hideIndex() vrátí.

Podobné jako hideIndex() , máte možnost zadat název indexu nebo jeho klíčový vzor.

Zde je příklad použití vzoru klíče:

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

V tomto případě byl index definován pomocí { weight : -1 } , a tak lze tuto definici použít místo názvu indexu.

K ověření můžeme použít getIndexes() k zobrazení definice indexu:

db.pets.getIndexes()

Výsledek:

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

Index můžeme také odkrýt předáním hidden: false .

Vytvořte skrytý index

Třetím způsobem, jak skrýt index, je vytvořit jej jako skrytý index.

Chcete-li to provést, použijte hidden: true jako jednu z možností při vytváření indexu.

Příklad:

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

Výstup:

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

Nyní zavoláme getIndexes() znovu zkontrolovat náš nově vytvořený skrytý index:

db.pets.getIndexes()

Výsledek:

[
	{
		"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"
	}
]

Vidíme, že byl vytvořen s "hidden": true .

Nelze skrýt indexy? Zkontrolujte toto nastavení.

mongod featureCompatibilityVersion musí být alespoň 4.4 než budete moci skrýt indexy. Jakmile je však index skrytý, zůstane skrytý i s featureCompatibilityVersion nastaveno na 4.2 na binárních souborech MongoDB 4.4.

Můžete zkontrolovat featureCompatibilityVersion nastavení pomocí následujícího kódu:

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

Můžete jej nastavit pomocí setFeatureCompatibilityVersion příkaz:

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

setFeatureCompatibilityVersion příkaz je třeba spustit v admin databáze.

Pamatujte také, že nemůžete skrýt _id index.


  1. Přístup k databázi produkce Meteor

  2. Existuje nějaká možnost, jak omezit využití paměti mongodb?

  3. Reference dokumentu Mongoose se vztahem jedna k mnoha

  4. Redis - sledování využití paměti