Indeksi
DocStore indeksi tiek glabāti blakus kolekcijai mapē .storh/indexes.
Tie ir parasti faili, kas pilnībā iegūti no ierakstiem un kurus var jebkurā laikā atjaunot. Deklarējiet tos plūstoši vai izmantojot shēmu:
$docs->indexes()
->field('slug')->unique()
->field('kind')
->field('publishedAt')->range()
->sync();
Indeksu veidi:
- vienādības indeksi laukiem, piemēram,
kindvaistatus: viens fails katrai atšķirīgai vērtībai, tāpēc atsevišķa meklēšana nolasa tikai atbilstošo vērtību failu - unikālie indeksi laukiem, piemēram,
slug: tiek nodrošināti rakstīšanas laikā; dublēta vērtība izraisa kļūduput(), pirms kaut kas tiek ierakstīts - diapazonu indeksi skalārām vērtībām: sakārtots fails ar retām meklēšanas kontrolpunktiem, kas nodrošina
gt,gte,lt,lte,betweenunprefix
Diapazonu indeksi var arī atbildēt uz orderBy tai pašā laukā ar limit tieši no indeksu secības — augošā vai dilstošā — neveidojot un nešķirojot visu rezultātu atmiņā.
Ja vaicājumā apvienoti divi eq nosacījumi laukiem ar vienādības indeksu, kas nav unikāli, storh var izmantot automātisku saliktu kopu šim lauku pārim. Tādējādi atlasīti divu lauku filtri ir ātri, un nav jādeklarē vēl viens indekss.
Saskaņotība un labošana
Ierakstu faili tiek atomiski aizstāti un pēc tam rakstīšanas slēdzenes ietvaros atjaunināti indeksu ieraksti, tāpēc ieraksti un indeksi mainās kopā.
verify() salīdzina katru indeksu ar visu ierakstu skenēšanu un ziņo par neatbilstībām; reindex() atjauno katru konfigurēto indeksu no ierakstu failiem; repair() ievieto bojātos ierakstus karantīnā un pēc tam atjauno indeksus.
$docs->reindex();
$plan = $docs
->query()
->where('slug')->eq('home')
->explain();
explain() atgriež index_scan, ja vaicājumu plānotājs var izmantot konfigurētu indeksu, un full_scan citos gadījumos.