Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Irgendwelche Leistungsauswirkungen in Oracle für die Verwendung von LIKE 'string' vs ='string'?

Es gibt einen klaren Unterschied, wenn Sie Bind-Variablen verwenden, die Sie in Oracle für alles andere als Data Warehousing oder andere Massendatenoperationen verwenden sollten.

Nehmen wir den Fall von:

SELECT * FROM SOME_TABLE WHERE SOME_FIELD LIKE :b1

Oracle kann bis zur Ausführungszeit nicht wissen, dass der Wert von :b1 '%some_value%' oder 'some_value' usw. ist, daher wird es eine Schätzung der Kardinalität des Ergebnisses basierend auf Heuristiken vornehmen und einen geeigneten Plan dafür erstellen kann für verschiedene Werte von :b geeignet sein oder auch nicht, wie '%A', '%', 'A' usw.

Ähnliche Probleme können bei einem Gleichheitsprädikat auftreten, aber der Bereich der Kardinalitäten, der sich daraus ergeben könnte, lässt sich beispielsweise viel einfacher anhand von Spaltenstatistiken oder dem Vorhandensein einer Eindeutigkeitsbeschränkung abschätzen.

Persönlich würde ich also nicht anfangen, LIKE als Ersatz für =zu verwenden. Der Optimierer ist manchmal ziemlich leicht zu täuschen.