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

OracleではsubstrまたはLIKEの方が高速ですか?

    最大のパフォーマンスが目標であると仮定すると、理想的にはSUBSTR(my_field,1,6)を選択します。 クエリをサポートする関数ベースのインデックスを作成します。

    CREATE INDEX my_substr_idx
        ON my_table( substr( my_field,1,6 ) );
    

    他の人が指摘しているように、SUBSTR(my_field,1,6) MY_FIELDで通常のインデックスを使用することはできません 。 LIKEバージョンはインデックスを使用する場合がありますが、その場合のオプティマイザーのカーディナリティ推定は一般にかなり貧弱であるため、役立つ場合はインデックスを使用しないか、テーブルスキャンが望ましい場合はインデックスを使用する可能性が高くなります。実際の式にインデックスを付けると、オプティマイザが操作する情報がはるかに多くなるため、インデックスを正しく選択する可能性が高くなります。私より賢い人なら、11gの仮想列の統計を使用して、オプティマイザーにLIKEクエリに関するより良い情報を提供する方法を提案できるかもしれません。

    6が変数の場合(つまり、最初の6文字を検索したい場合や、別の数字を検索したい場合)、そのクエリをサポートする関数ベースのインデックスを思い付くことができない可能性があります。その場合は、LIKE定式化を使用したオプティマイザーの決定の気まぐれを利用したほうがよいでしょう。



    1. .sqlファイルpostgresの画面に印刷

    2. SqlDataSourceEnumerator.Instance.GetDataSources()は、ローカルSQLServer2008インスタンスを検索しません

    3. Oracle:PL/SQLを使用してWordで通貨額を変換する

    4. 親テーブルと子テーブルからの行の削除