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

Substr o LIKE è più veloce in Oracle?

Supponendo che l'obiettivo sia la massima prestazione, sceglierei idealmente SUBSTR(my_field,1,6) e creare un indice basato su funzioni per supportare la query.

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

Come altri sottolineano, SUBSTR(my_field,1,6) non sarebbe in grado di utilizzare un indice normale su MY_FIELD . La versione LIKE potrebbe utilizzare l'indice, ma le stime della cardinalità dell'ottimizzatore in questo caso sono generalmente piuttosto scarse, quindi è molto probabile che non utilizzi un indice quando sarebbe utile o che utilizzi un indice quando sarebbe preferibile una scansione della tabella. L'indicizzazione dell'espressione effettiva fornirà all'ottimizzatore molte più informazioni con cui lavorare, quindi è molto più probabile che selezioni l'indice correttamente. Qualcuno più intelligente di me potrebbe essere in grado di suggerire un modo per utilizzare le statistiche sulle colonne virtuali in 11g per fornire all'ottimizzatore informazioni migliori per la query LIKE.

Se 6 è una variabile (cioè a volte vuoi cercare i primi 6 caratteri ea volte vuoi cercare un numero diverso), probabilmente non sarai in grado di trovare un indice basato su funzioni per supportare quella query. In tal caso, probabilmente stai meglio con i capricci delle decisioni dell'ottimizzatore con la formulazione LIKE.