sql >> データベース >  >> RDS >> Oracle

LIKE'string' vs ='string'を使用した場合のOracleのパフォーマンスへの影響はありますか?

    バインド変数を使用する場合は明らかな違いがあります。バインド変数は、データウェアハウジングやその他のバルクデータ操作以外の目的でOracleで使用する必要があります。

    次の場合を考えてみましょう:

    SELECT * FROM SOME_TABLE WHERE SOME_FIELD LIKE :b1
    

    Oracleは、実行時まで:b1の値が「%some_value%」または「some_value」などであることを認識できないため、ヒューリスティックに基づいて結果のカーディナリティを推定し、次のいずれかの適切な計画を作成します。 '%A'、'%'、'A'などの:bのさまざまな値に適している場合とそうでない場合があります。

    同様の問題は、等式述語にも当てはまりますが、結果として生じる可能性のあるカーディナリティの範囲は、たとえば、列の統計または一意性制約の存在に基づいてはるかに簡単に推定されます。

    ですから、個人的には=の代わりにLIKEを使い始めることはありません。オプティマイザーは時々だましやすいです。



    1. WindowsサービスとSQLServerを使用したOneWayWCFメッセージのキューイング

    2. 16の異なるクエリ例を使用したMySQLのWHERE条件

    3. SQLiteアップデート

    4. MSSQLServerでの長時間実行クエリのトラブルシューティング