Înțelegerea indexării în MongoDB

TLDR: Indexarea este doar o modalitate de grupare a documentelor, împărțind colecțiile în grupuri pentru a accelera performanța

Overview

Indexul crește performanța interogării, precum și performanța de căutare

Ideea de indexare în MongoDB este similară cu indexul oricărei cărți, care crește viteza de căutare a unei pagini. Indexul din MongoDB crește viteza de căutare a documentelor

Cum funcționează indexurile?

În primul rând, să înțelegem cum se declară indexul în MongoDB

collectionName.createIndex({field:value}) //for creating indexcollectionName.dropIndex({field:value}) //for removing index

Aici, câmpul este „fieldName” care va fi indexat. „Value” poate fi -1 sau 1 sau „text”.

Acesta definește tipul de index, 1 sau -1 crește performanța interogării find(), în timp ce „text” este utilizat pentru căutare.

1 și -1 dau ordinea indexului. Ascendent = -1 & Descendent =1

Acum, cum funcționează indicii sub capotă?

Imaginați-vă o colecție de utilizatori, fiecare document conținând diverse informații, una dintre ele fiind scorul.

Să spunem că vrem ca toți utilizatorii să aibă scorul 23.

Când nu există un index, MongoDB trece prin fiecare document pentru a găsi documentul interogat, acest lucru se numește scanare de colecție, MongoDB are o prescurtare pentru acest COLLSCAN (acest lucru se numește scanare de tabel în bazele de date relaționale)

Cum putem optimiza acest lucru?

Pentru a optimiza acest lucru putem crea un tabel cu o coloană pentru scor și o altă coloană pentru referințe care va conține ID-urile documentelor cu un anumit scor. Acum trebuie să scanăm doar acel tabel, în loc să scanăm întreaga bază de date. Acest lucru este mult mai rapid. Aceasta este exact ceea ce este un index.

Indexurile ajută MongoDB să restrângă setul de date pe care va trebui să îl scaneze. Acest lucru se numește Index Scan, MongoDB are și o prescurtare pentru acest lucru IXNSCAN

Iată o reprezentare vizuală a unui Index de scor și a cartografierii sale.

Îmbunătățirea performanței prin Index este vizibilă doar atunci când numărul de documente trece de 100K sau cam așa ceva.

Puteți compara chiar dvs. comparând două interogări, una cu un câmp indexat și una fără Index

db.<collection name>.find(query).explain()

Se va returna un obiect

obiect.winingPlan.stage va spune tipul de scanare COLLSCAN sau IXNSCAN

dar nu vă va spune timpul de execuție

utilizați metoda explain(‘executionStat’) înaintea metodei de interogare precum find

.

db.<collection name>explain('executionStat').find(query)

executionTimeMillis vă va spune timpul petrecut în execuție

Downsides of Index

Indexurile nu sunt gratuite, Indicii costă spațiu. Indicii pot crește viteza de citire, dar ori de câte ori se scrie ceva, indexul trebuie actualizat pentru a rezolva acest lucru, folosim B- tree, facem unele calcule înainte de inserție, astfel încât să fie mai rapid.

B-Tree

Indexurile nu sunt un tabel de grupuri, din punct de vedere conceptual este de fapt un B-Tree (Binary Tree) nu doar MongoDB, baza de date SQL folosește, de asemenea, B Tree pentru indexare

acest video explică cel mai bine B Tree

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.