sql >> Database >  >> RDS >> Oracle

Enige prestatie-impact in Oracle voor het gebruik van LIKE 'string' vs ='string'?

Er is een duidelijk verschil wanneer u bindvariabelen gebruikt, die u in Oracle zou moeten gebruiken voor iets anders dan datawarehousing of andere bulkgegevensbewerkingen.

Neem het geval van:

SELECT * FROM SOME_TABLE WHERE SOME_FIELD LIKE :b1

Oracle kan tot de uitvoeringstijd niet weten dat de waarde van :b1 '%some_value%' of 'some_value' enz. is, dus het zal een schatting maken van de kardinaliteit van het resultaat op basis van heuristieken en een geschikt plan bedenken dat ofwel kan al dan niet geschikt zijn voor verschillende waarden van :b, zoals '%A','%', 'A' enz.

Soortgelijke problemen kunnen van toepassing zijn met een gelijkheidspredikaat, maar het bereik van kardinaliteiten dat kan resulteren, kan veel gemakkelijker worden geschat op basis van kolomstatistieken of de aanwezigheid van een unieke beperking, bijvoorbeeld.

Dus persoonlijk zou ik LIKE niet gaan gebruiken als vervanging voor =. De optimizer is soms vrij gemakkelijk voor de gek te houden.



  1. Logboekbufferspoelingen begrijpen

  2. Datum ontleden in MySQL

  3. Tekensets en sorteringen in MySQL begrijpen

  4. Problemen met transactiereplicatie van SQL Server oplossen