sql >> Databáze >  >> RDS >> Oracle

Nějaký dopad na výkon v Oracle při použití LIKE 'string' vs ='string'?

Je jasný rozdíl, když používáte proměnné vazby, které byste měli používat v Oracle pro cokoli jiného než pro ukládání dat nebo jiné operace s hromadnými daty.

Vezměte si případ:

SELECT * FROM SOME_TABLE WHERE SOME_FIELD LIKE :b1

Oracle nemůže vědět, že hodnota :b1 je '%some_value%' nebo 'some_value' atd. až do doby provedení, takže provede odhad mohutnosti výsledku na základě heuristiky a přijde s vhodným plánem, který buď může nebo nemusí být vhodné pro různé hodnoty :b, jako je '%A', '%', 'A' atd.

Podobné problémy mohou platit s predikátem rovnosti, ale rozsah mohutností, které mohou vzniknout, lze mnohem snadněji odhadnout na základě statistiky sloupců nebo například přítomnosti jedinečného omezení.

Osobně bych tedy nezačal používat LIKE jako náhradu za =. Optimalizátor je někdy docela snadné oklamat.



  1. MySQL Group_Concat() vs T-SQL String_Agg()

  2. Jak odeslat libovolné parametry do triggeru Oracle?

  3. ROUND(číslo) Funkce v Oracle

  4. SQL, Pomocná tabulka čísel