sql >> Database teknologi >  >> RDS >> Oracle

Er substr eller LIKE hurtigere i Oracle?

Forudsat at maksimal ydeevne er målet, ville jeg ideelt set vælge SUBSTR(my_field,1,6) og opret et funktionsbaseret indeks for at understøtte forespørgslen.

CREATE INDEX my_substr_idx
    ON my_table( substr( my_field,1,6 ) );

Som andre påpeger, SUBSTR(my_field,1,6) ville ikke være i stand til at bruge et almindeligt indeks på MY_FIELD . LIKE-versionen kan muligvis bruge indekset, men optimizerens kardinalitetsestimater i det tilfælde er generelt ret dårlige, så det er ret sandsynligt, at du enten ikke bruger et indeks, når det ville være nyttigt, eller at bruge et indeks, når en tabelscanning ville være at foretrække. Indeksering af det faktiske udtryk vil give optimeringsværktøjet langt mere information at arbejde med, så det er meget mere sandsynligt, at indekset vælges korrekt. Nogen klogere end jeg er måske i stand til at foreslå en måde at bruge statistik på virtuelle kolonner i 11g for at give optimeringsværktøjet bedre information til LIKE-forespørgslen.

Hvis 6 er en variabel (dvs. du nogle gange ønsker at søge efter de første 6 tegn og nogle gange vil søge efter et andet tal), vil du sandsynligvis ikke være i stand til at finde et funktionsbaseret indeks til at understøtte denne forespørgsel. I så fald er du sikkert bedre stillet med lunhederne i optimizerens beslutninger med LIKE-formuleringen.



  1. SQL:Hvad er bedre en bit eller et tegn(1)

  2. Hvordan påvirker søgestien identifikatoropløsning og det aktuelle skema

  3. Sådan eksporteres en liste over sammenkædede tabeller til Excel fra Access 2016

  4. I Rails, kunne ikke oprette database for {adapter=>postgresql,