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

Qualsiasi impatto sulle prestazioni in Oracle per l'utilizzo di LIKE 'string' vs ='string'?

C'è una chiara differenza quando usi le variabili di binding, che dovresti usare in Oracle per qualcosa di diverso dal data warehousing o altre operazioni di dati di massa.

Prendi il caso di:

SELECT * FROM SOME_TABLE WHERE SOME_FIELD LIKE :b1

Oracle non può sapere che il valore di :b1 è '%some_value%' o 'some_value' ecc. fino al momento dell'esecuzione, quindi eseguirà una stima della cardinalità del risultato in base all'euristica e inventerà un piano appropriato che sia può essere adatto o meno per vari valori di :b, come '%A','%', 'A' ecc.

Problemi simili possono essere applicati con un predicato di uguaglianza, ma l'intervallo di cardinalità che potrebbe risultare è molto più facilmente stimabile in base alle statistiche delle colonne o alla presenza di un vincolo univoco, ad esempio.

Quindi, personalmente non inizierei a usare LIKE come sostituto di =. L'ottimizzatore a volte è abbastanza facile da ingannare.