Liigu sisu juurde

Indeksid

DocStore indeksid asuvad kogumi kõrval kataloogis .storh/indexes. Need on tavalised failid, mis tuletatakse täielikult kirjetest ja mida saab igal ajal uuesti luua. Määra need sujuva liidese või skeemi kaudu:

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

Indeksitüübid:

  • võrdsusindeksid väljadele nagu kind või status: iga eri väärtuse jaoks on oma fail, nii et üksikpäring loeb ainult vastava väärtuse faili
  • unikaalsusindeksid väljadele nagu slug: unikaalsust kontrollitakse kirjutamise ajal; korduv väärtus põhjustab put() tõrke enne kirjutamist
  • vahemikuindeksid skalaarväärtustele: hõreda otsimisindeksiga sorteeritud fail, mis teenindab gt, gte, lt, lte, between ja prefix

Vahemikuindeksid saavad samal väljal vastata ka päringule orderBy, kasutades limit järjestust otse indeksist, kasvavalt või kahanevalt, ilma kogu tulemusi mällu laadimata ja sortimata.

Kui päring ühendab kaks eq tingimust mitteunikaalsetel võrdsusindekseeritud väljadel, saab storh kasutada selle väljapaari jaoks automaatset liitindeksi ämbrit. Nii jäävad kahe välja valikulised filtrid kiireks, ilma et peaksid lisaks indeksit deklareerima.

Kooskõla ja parandamine

Kirjutamisel uuendatakse indeksikirjeid pärast kirjefaili aatomilist asendamist kogumi kirjutusluku all, nii et kirjed ja indeksid liiguvad koos. verify() võrdleb iga indeksit kirjete täieliku läbivaatusega ja teatab lahknevustest; reindex() loob kõik seadistatud indeksid kirjefailide põhjal uuesti; repair() paigutab rikutud kirjed karantiini ja loob seejärel indeksid uuesti.

PHP
$docs->reindex();

$plan = $docs
    ->query()
    ->where('slug')->eq('home')
    ->explain();

explain() tagastab index_scan, kui päringuplaanur saab kasutada seadistatud indeksit, ja vastasel juhul full_scan.