sql >> Databasteknik >  >> RDS >> Oracle

Någon prestandapåverkan i Oracle för att använda LIKE 'sträng' vs ='sträng'?

Det finns en tydlig skillnad när du använder bindningsvariabler, som du bör använda i Oracle för allt annat än datalager eller andra bulkdataoperationer.

Ta fallet med:

SELECT * FROM SOME_TABLE WHERE SOME_FIELD LIKE :b1

Oracle kan inte veta att värdet på :b1 är '%some_value%', eller 'some_value' etc. fram till körningstidpunkten, så det kommer att göra en uppskattning av kardinaliteten av resultatet baserat på heuristik och komma med en lämplig plan som antingen kan eller kanske inte är lämpliga för olika värden på :b, såsom '%A', '%', 'A' osv.

Liknande problem kan gälla med ett likhetspredikat, men intervallet av kardinaliteter som kan uppstå är mycket lättare att uppskatta baserat på kolumnstatistik eller närvaron av en unik begränsning, till exempel.

Så personligen skulle jag inte börja använda LIKE som ersättning för =. Optimeraren är ganska lätt att lura ibland.



  1. Cloud Vendor Deep-Dive:PostgreSQL på Microsoft Azure

  2. Ta bort ett databaspostkonto (SSMS)

  3. Hur LTRIM()-funktionen fungerar i MySQL

  4. Lösningsindex för tabellanvändare är korrupt; försök att reparera det