Pāriet uz saturu

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:

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

Indeksu veidi:

  • vienādības indeksi laukiem, piemēram, kind vai status: 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ļūdu put(), 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, between un prefix

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.

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