Indeksit
DocStore-indeksit tallennetaan kokoelman viereen hakemistoon .storh/indexes. Ne ovat tavallisia tiedostoja, jotka johdetaan kokonaan tietueista ja voidaan rakentaa uudelleen milloin tahansa. Määritä ne sujuvalla syntaksilla tai skeeman avulla:
$docs->indexes()
->field('slug')->unique()
->field('kind')
->field('publishedAt')->range()
->sync();
Indeksityypit:
- yhtäsuuruusindeksit kentille, kuten
kindtaistatus: yksi tiedosto kutakin eri arvoa kohti, joten yksittäishaku lukee vain vastaavan arvotiedoston - yksikäsitteisyysindeksit kentille, kuten
slug: yksikäsitteisyys tarkistetaan kirjoitettaessa, ja kaksoisarvo aiheuttaa virheenput()ennen kirjoittamista - väli-indeksit skalaarisille arvoille: lajiteltu tiedosto, jossa on harvat hakupisteet; palvelee kyselyitä
gt,gte,lt,lte,betweenjaprefix
Alueindeksit voivat myös vastata orderBy saman kentän kohdalla käyttäen limit-indeksiä suoraan nousevassa tai laskevassa järjestyksessä ilman, että koko tulosta tarvitsee muodostaa ja lajitella.
Kun kysely yhdistää kaksi eq-ehtoa kenttiin, joilla on ei-yksikäsitteiset yhtäsuuruusindeksit, storh voi käyttää automaattista yhdistelmäkoria kyseiselle kenttäparille. Näin kahden kentän valikoivat suodattimet pysyvät nopeina ilman erillistä indeksimääritystä.
Eheys ja korjaus
Kirjoitukset päivittävät indeksimerkinnät sen jälkeen, kun tietuetiedosto on korvattu atomisesti. Tämä tapahtuu kokoelman kirjoituslukon alla, joten tietueet ja indeksit päivittyvät yhdessä. verify() vertaa jokaista indeksiä kaikkiin tietueisiin tehtävään täyteen läpikäyntiin ja raportoi poikkeamat; reindex() rakentaa jokaisen määritetyn indeksin uudelleen tietuetiedostoista; repair() asettaa vioittuneet tietueet karanteeniin ja rakentaa sitten indeksit uudelleen.
$docs->reindex();
$plan = $docs
->query()
->where('slug')->eq('home')
->explain();
explain() palauttaa arvon index_scan, kun kyselysuunnittelija voi käyttää määritettyä indeksiä, ja muussa tapauksessa arvon full_scan.