Indexy
DocStore indexy sa ukladajú vedľa kolekcie do .storh/indexes.
Sú to bežné súbory odvodené výlučne zo záznamov a možno ich
kedykoľvek znova vytvoriť. Deklarujte ich plynulo alebo prostredníctvom
schémy:
$docs->indexes()
->field('slug')->unique()
->field('kind')
->field('publishedAt')->range()
->sync();
Typy indexov:
- indexy rovnosti pre polia ako
kindalebostatus: jeden súbor pre každú jedinečnú hodnotu, takže vyhľadávanie konkrétnej hodnoty číta iba zodpovedajúci súbor - jedinečné indexy pre polia ako
slug: vynucujú sa pri zápise, duplicitná hodnota spôsobí zlyhanieput()ešte pred zápisom - rozsahové indexy pre skalárne hodnoty: zoradený súbor so riedkymi
kontrolnými bodmi na preskakovanie, ktorý podporuje
gt,gte,lt,lte,betweenaprefix
Rozsahové indexy dokážu na tom istom poli odpovedať aj na orderBy pomocou limit
priamo v poradí indexu, vzostupne alebo zostupne, bez materializácie a
zoradenia celého výsledku.
Keď dotaz kombinuje dva predikáty eq na poliach s indexom rovnosti, ktoré nie sú jedinečné,
storh môže pre túto dvojicu polí použiť automatický zložený blok. Vďaka tomu
zostávajú selektívne filtre podľa dvoch polí rýchle bez potreby deklarovať ďalší index.
Konzistentnosť a oprava
Zápisy aktualizujú položky indexu po atómovom nahradení súboru záznamu,
pod zámkom zápisu kolekcie, takže záznamy a indexy sa menia spoločne.
verify() porovná každý index s úplným skenovaním záznamov a nahlási odchýlky;
reindex() znova vytvorí každý nakonfigurovaný index zo súborov záznamov; repair()
presunie poškodené záznamy do karantény a potom indexy znova vytvorí.
$docs->reindex();
$plan = $docs
->query()
->where('slug')->eq('home')
->explain();
explain() vráti index_scan, keď plánovač môže použiť nakonfigurovaný index, a
full_scan v opačnom prípade.