Index
DocStore-index lagras bredvid samlingen under .storh/indexes.
De är vanliga filer som helt härleds från posterna och kan byggas om
när som helst. Deklarera dem med en flytande syntax eller via ett
schema:
$docs->indexes()
->field('slug')->unique()
->field('kind')
->field('publishedAt')->range()
->sync();
Indextyper:
- jämlikhetsindex för fält som
kindellerstatus: en fil per unikt värde, så en punktuppslagning läser endast den matchande värdefilen - unikhetsindex för fält som
slug: upprätthålls vid skrivning; ett duplicerat värde gör attput()misslyckas innan något skrivs - intervallindex för skalära värden: en sorterad fil med glesa sökkontrollpunkter,
som hanterar
gt,gte,lt,lte,betweenochprefix
Intervallindex kan även besvara orderBy på samma fält med en limit
direkt från indexordningen, stigande eller fallande, utan att skapa och
sortera hela resultatet i minnet.
När en fråga kombinerar två eq-predikat på icke-unika jämlikhetsindexerade fält,
kan storh använda en automatisk sammansatt hink för det fältparet. Detta håller
filter på två fält med få träffar snabba utan att kräva en till indexdeklaration.
Konsekvens och reparation
Skrivningar uppdaterar indexposter efter att postfilen har bytts atomärt,
under samlingens skrivlås, så att poster och index ändras tillsammans.
verify() jämför varje index med en fullständig genomsökning av posterna och rapporterar avvikelser;
reindex() bygger om alla konfigurerade index från postfilerna; repair()
sätter skadade poster i karantän och bygger sedan om.
$docs->reindex();
$plan = $docs
->query()
->where('slug')->eq('home')
->explain();
explain() returnerar index_scan när frågeplaneraren kan använda ett konfigurerat index och
full_scan annars.