SQLite Expression Based Index

SQLite Expression Based Index
I SQLite- eller SQL -databaser brukes indekser for å referere til noen kolonner i en tabell. Disse indeksene kan være sammensatt av en eller flere kolonner og kan være unike. Sammen med det kan vi lage indekser på forskjellige uttrykk som inneholder forskjellige kolonner i hvilken som helst tabell. Disse uttrykkene kan defineres i hvor tilstandsklausulen i SELECT -instruksjonen. Dermed bestemte vi oss for å forklare bruken av uttrykk for å lage indekser og hvordan de påvirker resultatene.

La oss komme i gang med denne artikkelen ved å åpne skallterminalen til Ubuntu 20.04 raskt. Bruk hurtigtasten “Ctrl+Alt+T” for å gjøre det. Etter den vellykkede lanseringen av Shell -terminalen, må du oppdatere Linux -systemet ditt ved bruk av oppdatering og oppgraderingskommandoer ved hjelp av en APT -pakke. Etter det, åpne SQLite -databasen ved å bruke "Sqlite3" -instruksjonen. Akkurat nå har vi ingen tabeller i databasen så langt, jeg.e. bruker .Tabeller kommando.

For å lage indeksene på uttrykk, trenger vi en tabell i databasen vår. Vi opprettet en ny tabell som heter "Detalj" i vår database som inneholder totalt 3 heltallkolonner, i.e. Id, detaljhandel og salg. Bordet er tomt akkurat nå, jeg.e. I henhold til SELECT -kommandoen.

Lag tabelldetaljer (id int primær nøkkel ikke null, detaljhandel int, salg int);
Velg * fra detaljer;

Vi må legge til noen poster i detaljtabellen slik at vi kan lage indeksene på kolonnene etter det. Dermed benyttet vi innsetting av instruksjonen med inn i nøkkelordet etterfulgt av tabellnavnet "Detalj" og kolonnenavn "ID, Retail, Sale". Kolonnenavnene blir fulgt av søkeordverdiene og postene som skal settes inn i kolonnene. Vi satte inn totalt 10 poster innen tre kolonner fra denne tabellen; Hver og en er unik som vist:

Sett inn i detalj (id, detaljhandel, salg) verdier (1, 340, 400);
Sett inn i detalj (id, detaljhandel, salg) verdier (2, 380, 420);
Sett inn i detalj (id, detaljhandel, salg) verdier (3, 205, 230);
Sett inn i detalj (id, detaljhandel, salg) verdier (4, 98, 110);
Sett inn i detalj (id, detaljhandel, salg) verdier (5, 311, 340);
Sett inn i detalj (id, detaljhandel, salg) verdier (6, 100, 120);
Sett inn i detalj (id, detaljhandel, salg) verdier (7, 512, 540);
Sett inn i detalj (id, detaljhandel, salg) verdier (8, 634, 670);
Sett inn i detalj (id, detaljhandel, salg) verdier (9, 54, 67);
Sett inn i detalj (id, detaljhandel, salg) verdier (10, 934, 990);

Etter å ha brukt SELECT -instruksjonen med “*” for å vise alle kolonnepostene fra detaljtabellen, viste vi de nylig innsatte 10 postene i tabellen.

Velg * fra detaljer;

Før vi lager en indeks på uttrykkene, tar vi en titt på den enkle spørringen for å hente postene med bruk av uttrykk. Vi bruker også rekkefølgen etter alternativ i spørringen for å organisere resultatene i henhold til den synkende rekkefølgen på en lengde på en kolonnebutikk. Totalt 8 poster vises på skjermen vår så langt.

Velg * fra detaljer hvor lengde (detaljhandel)> 2 bestill etter lengde (detaljhandel) desc;

Vi bruker den samme spørringen i SQLite Query Planner -instruksjonen for å se hvordan SQLite fungerer for å utføre denne spørringen. Vi fant ut at det må skanne hele tabellen "detalj" ved hjelp av det midlertidige B-treet (balansert tre) på ordren etter klausul.

Forklar spørringsplan velg * fra detaljer hvor lengde (detaljhandel)> 2 bestilling etter lengde (detaljhandel) desc;

La oss lage en indeks på samme uttrykk "lengde" på detaljhandelen i en tabelldetalj. Vi bruker Create Index -instruksjonen for å opprette indeksen “Index_Retail”.

Opprette indeksindeks_retail på detaljer (lengde (detaljhandel));

Etter å ha opprettet indeksen på detaljtabellen, brukte vi spørringsplanleggeren for å se arbeidsstrukturen i spørringen. Det viser at spørringen har arbeidet med den ekspresjonsbaserte indeksen for å hente de nødvendige resultatene i stedet for å søke i hele tabellen.

Forklar spørringsplan velg * fra detaljer hvor lengde (detaljhandel)> 2 bestilling etter lengde (detaljhandel) desc;

Etter å ha brukt SELECT -instruksjonen om det samme uttrykket for å hente postene, vises nå dataene i den synkende rekkefølgen på lengden på detaljhandelen.

La oss opprette et annet valgt spørsmål med et uttrykk. Denne gangen vil hvor klasseuttrykk bare vise postene der summen av detaljhandels- og salgskolonnen er større enn 700.

Velg * fra detalj der detaljhandel+salg> 700;

Vi benyttet den forrige Select -instruksjonen sammen med enkeltkolonnene og uttrykket “Retail+Sale> 700” den inneholder, i spørringsplanleggerens instruksjon. Resultatet av spørringsplanleggeren viser at SQLite -databasen må søke over hele detaljtabellen for å hente de nødvendige resultatene med dette ganske ineffektive uttrykket.

Forklar spørringsplan velg ID, detaljhandel, salg, detaljhandel+salg fra detaljer der detaljhandel+salg> 700;

La oss opprette en ny indeks på uttrykket “Retail+Sale” som brukes i forrige utvalgte instruksjon. Så vi benyttet oss. Den nyopplagte indeksen “Index_Detail” kan sees i indekslisten i henhold til “.indekser detalj ”instruksjon.

Opprett indeksindeks_Detail på detaljer (Retail+Sale);

La oss nå prøve ut spørringsplanleggerens instruksjon for samme valginstruksjon som inneholder detaljhandel+salg> 700 uttrykk i den som brukes i hvor leddet i SELECT -instruksjonen. Etter å ha brukt Query Planner, fant vi at SQLite -planen bare vil søke i de spesifikke oppføringene til en tabelldetalj i henhold til indeksen “Index_Detail” som inneholder et uttrykk.

Forklar spørringsplan velg ID, detaljhandel, salg, detaljhandel+salg fra detaljer der detaljhandel+salg> 700;

La oss endre uttrykket ved å utveksle navnene på kolonnene med hverandre uten å endre kunnskap. Hver gang du bruker samme valg av instruksjon med den lille endringen i uttrykket, i.e. “Salg+detaljhandel> 700”, det viser de samme 5 resultatene siden logikken er riktig og det samme brukes i forrige SELECT -instruksjon.

Velg * fra detaljer der salg+detaljhandel> 700;

Etter å ha brukt den tidligere modifiserte Select-instruksjonen i instruksjonen. Dette er fordi vi ikke har opprettet en indeks for det nylig modifiserte uttrykket “Sale+Retail> 700” i SELECT -spørringen.

Forklar spørringsplan velg ID, detaljhandel, salg, salg+detaljhandel fra detaljer hvor salg+detaljhandel> 700;

Konklusjon

Denne artikkelen handler om å lage en indeks på forskjellige uttrykk. Vi prøvde å bruke instruksjonen.