Hoppa till innehåll

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:

PHP
$docs->indexes()
    ->field('slug')->unique()
    ->field('kind')
    ->field('publishedAt')->range()
    ->sync();

Indextyper:

  • jämlikhetsindex för fält som kind eller status: 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 att put() 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, between och prefix

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.

PHP
$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.