Ako zlepšiť dotazy pomocou indexovania MongoDB

Ako Zlepsit Dotazy Pomocou Indexovania Mongodb



Zvýšenie rýchlosti dopytov je nevyhnutné pre MongoDB a všetky ostatné databázové systémy. Vybudovaním dátových štruktúr, ktoré pomáhajú MongoDB identifikovať záznamy rýchlejšie, je indexovanie účinným prístupom k zrýchleniu a optimalizácii vyhľadávania. Indexy obsahujú kópie niektorých údajov zo záznamov na zefektívnenie dopytov. To zjednodušuje úsilie spojené s odpovedaním na požiadavky v MongoDB. V tejto príručke sa budeme zaoberať používaním indexov pomocou rôznych typov indexovania.

Vytvoriť zbierku

Pred použitím indexov musíme vytvoriť novú kolekciu v našej MongoDB. Jeden sme už vytvorili a vložili 10 dokumentov s názvom „Dummy“. Funkcia find() MongoDB zobrazuje všetky záznamy z kolekcie „Dummy“ na obrazovke shell MongoDB nižšie.

test> db.Dummy.find()







Vyberte Typ indexovania

Pred vytvorením indexu musíte najprv určiť stĺpce, ktoré sa budú bežne používať v kritériách dotazu. Indexy fungujú dobre v stĺpcoch, ktoré sa často filtrujú, triedia alebo prehľadávajú. Polia s veľkou mohutnosťou (veľa rôznych hodnôt) sú často vynikajúcimi možnosťami indexovania. Tu je niekoľko príkladov kódu pre rôzne typy indexov.



Príklad 01: Index jedného poľa

Je to pravdepodobne najzákladnejší typ indexu, ktorý indexuje jeden stĺpec, aby zvýšil rýchlosť dotazovania v tomto stĺpci. Tento typ indexu sa používa pre dotazy, v ktorých na dopytovanie záznamov kolekcie používate jedno kľúčové pole. Predpokladajme, že použijete pole „type“ na dopytovanie záznamov kolekcie „Dummy“ v rámci funkcie vyhľadávania, ako je uvedené nižšie. Tento príkaz by prezrel celú kolekciu, čo môže trvať dlho, kým sa veľké kolekcie spracujú. Preto musíme optimalizovať výkon tohto dotazu.



test> db.Dummy.find({type: 'emp' })





Záznamy kolekcie Dummy vyššie boli nájdené pomocou poľa „type“, t. j. obsahujúceho podmienku. Preto tu možno na optimalizáciu vyhľadávacieho dopytu použiť index s jedným kľúčom. Takže použijeme funkciu createIndex () MongoDB na vytvorenie indexu v poli „type“ kolekcie „Dummy“. Ilustrácia použitia tohto dotazu zobrazuje úspešné vytvorenie indexu s jedným kľúčom s názvom „type_1“ v shelli.

test> db.Dummy.createIndex({ typ: 1 })

Použime dotaz find (), keď získa využitie poľa „typ“. Operácia bude teraz výrazne rýchlejšia ako predtým používaná funkcia find(), keďže index je na mieste, pretože MongoDB môže index využiť na rýchle získanie záznamov s požadovaným názvom úlohy.



test> db.Dummy.find({type: 'emp' })

Príklad 02: Index zlúčeniny

Za určitých okolností môžeme chcieť hľadať položky na základe rôznych kritérií. Implementácia zloženého indexu pre tieto polia môže pomôcť zlepšiť výkon dotazu. Povedzme, že tentoraz chcete vyhľadávať v kolekcii „Dummy“ pomocou viacerých polí obsahujúcich rôzne podmienky vyhľadávania, ako sa zobrazuje dopyt. Tento dotaz hľadal záznamy z kolekcie, kde je pole „type“ nastavené na „emp“ a pole „sal“ je väčšie ako 350.

Logický operátor $gte bol použitý na aplikovanie podmienky na pole „sal“. Po prehľadaní celej zbierky, ktorá pozostáva z 10 záznamov, sa vrátili celkovo dva záznamy.

test> db.Dummy.find({type: 'emp' , predaj: {$gte: 350 } })

Vytvorme zložený index pre vyššie uvedený dotaz. Tento zložený index má polia „type“ a „sal“. Čísla „1“ a „-1“ predstavujú vzostupné a zostupné poradie polí „type“ a „sal“. Poradie stĺpcov zloženého indexu je dôležité a malo by zodpovedať vzorom dopytov. MongoDB dal tomuto zloženému indexu, ako je zobrazený, názov „type_1_sal_-1“.

test> db.Dummy.createIndex({ typ: 1 , bude:- 1 })

Po použití rovnakého dotazu find() na vyhľadávanie záznamov s hodnotou poľa „typ“ ako „emp“ a hodnotou poľa „sal“ väčšou ako 350 sme získali rovnaký výstup s miernou zmenou v poradí v porovnaní s predchádzajúcim výsledkom dopytu. Väčší záznam hodnoty pre pole „sal“ je teraz na prvom mieste, zatiaľ čo najmenší je na najnižšom mieste podľa „-1“ nastavenej pre pole „sal“ v zloženom indexe vyššie.

test> db.Dummy.find({type: 'emp' , predaj: {$gte: 350 } })

Príklad 03: Textový index

Niekedy sa môžete stretnúť so situáciou, v ktorej by ste sa mali zaoberať veľkým súborom údajov, ako sú veľké popisy produktov, prísad atď. Textový index môže byť užitočný na vykonávanie fulltextového vyhľadávania vo veľkom textovom poli. V rámci našej testovacej databázy sme napríklad vytvorili novú kolekciu s názvom „Test“. Do tejto kolekcie bolo vložených celkom 6 záznamov pomocou funkcie insertMany() podľa dotazu find() nižšie.

test> db.Test.insertMany([

{názov: 'Ana' , z: 'Žije v Londýne a je dobrá učiteľka' },

{názov: 'Robert' , z: 'Je to úžasný futbalista' },

{názov: 'od' , z: 'Možno cestujete po Dubaji' },

{názov: 'Jacob' , z: 'Je ohromujúci a bohatý.' },

{názov: 'Cillian' , z: „Super začiatok filmu sa preslávil za pár sekúnd“ },

{názov: 'Ken' , z: 'Milovník jedla. Môže zjesť aj teba.' }

])

Teraz vytvoríme textový index v poli „Des“ tejto kolekcie pomocou funkcie createIndex () MongoDB. Kľúčové slovo „text“ v hodnote poľa zobrazuje typ indexu, ktorým je „textový“ index. Názov indexu, des_text, bol vygenerovaný automaticky.

test> db.Test.createIndex({ des: 'text' })

Teraz bola funkcia find() použitá na vykonanie „textového vyhľadávania“ v kolekcii prostredníctvom indexu „des_text“. Operátor $search bol použitý na vyhľadanie slova „jedlo“ v záznamoch zbierky a zobrazenie tohto konkrétneho záznamu.

test> db.Test.find({ $text: { $search: 'jedlo' }});

Overiť indexy:

Môžete skontrolovať a uviesť zoznam všetkých použitých indexov rôznych kolekcií vo vašej MongoDB. Na tento účel použite metódu getIndexes() spolu s názvom kolekcie na obrazovke shell MongoDB. Tento príkaz sme použili samostatne pre kolekcie „Test“ a „Dummy“. Na obrazovke sa zobrazia všetky potrebné informácie týkajúce sa vstavaných a používateľom definovaných indexov.

test> db.Test.getIndexes()

test> db.Dummy.getIndexes()

Indexy poklesu:

Je čas odstrániť indexy, ktoré boli predtým vytvorené pre kolekciu pomocou funkcie dropIndex() spolu s rovnakým názvom poľa, na ktorý bol index použitý. Dotaz uvedený nižšie ukazuje, že jeden index bol odstránený.

test> db.Dummy.dropIndex({type: 1 })

Rovnakým spôsobom možno vypustiť zložený index.

test> db.Dummy.drop index({type: 1 , bude: 1 })

Záver

Vďaka zrýchleniu získavania údajov z MongoDB je indexovanie nevyhnutné na zvýšenie efektivity dopytov. Bez indexov musí MongoDB hľadať zodpovedajúce záznamy v celej kolekcii, čo sa s rastúcou veľkosťou sady stáva menej efektívne. Schopnosť MongoDB rýchlo objaviť správne záznamy pomocou štruktúry indexovej databázy urýchľuje spracovanie dopytov, ak sa použije vhodné indexovanie.