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

LIKE'%...%'ワイルドカードクエリのPL/SQLパフォーマンスチューニング

    すでに述べたように、名前の列にctxコンテキストインデックスを追加できます。

    少数のレコードが更新されると仮定すると、1つのオプションは、インデックスを毎日更新することです。 (そしてそれがいつ起こったかを記録する)

    次に、検索対象のテーブルに最終更新日列とインデックスを追加します。

    ctxインデックスをスキャンして、変更されていない古いデータの大部分を探し、従来のLIKEe.gを使用して更新されたデータのわずかな割合から選択できるはずです。

    WHERE (lastupdated<lastrefresh AND contains(name,'%ABC%')) 
       OR (lastupdated>lastrefresh AND name like '%ABC%')
    

    注:クエリプランが少し精神的になる場合があります(行IDへのビットマップ変換がたくさんあります)。その場合、ORの2つの部分をUNIONALLクエリに分割します。例:

    SELECT id FROM mytable   
        WHERE 
        (lastupdate>lastrefresh and name LIKE '%ABC%')
        UNION ALL
        SELECT id FROM mytable   
        WHERE lastupdate<lastrefresh and CONTAINS(name, '%ABC%', 1) > 0
    


    1. 累積合計を取得する方法

    2. 初心者のためのSQLSELECT

    3. 指定された文字列を分割し、caseステートメントを準備します

    4. Androidを搭載したドライバーJDBCPostgreSQL