大量のゾーン(gvcodeとcgiで定義された問合せで)に定義された電話番号接頭辞のリストがあります。 与えられた番号PHONE_NRに一致する最も長いプレフィックスを効率的に見つける必要があります。ORACLEで最も長い接頭辞を検索する最速の方法
フィールド桁(+ 48%、+ 49%、+ 1%、+ 1232%という形式の接頭辞を含む)に反転LIKE句を使用します。
したがって、私はそのフィールドで通常のインデックスを使用することはできません。
gvcodeとcgiフィールド(主キーの最初の2つの列)にIOTを使用することで、大幅な改善が得られました。 私もいくつかのOracleテキストインデックスを見ましたが、テーブルの短い接頭辞を持つより長い入力と一致するものを見つけることができません。
この方法よりも速い検索を実行する方法はありますか?
これは、すべての一致するプレフィックスのリストを与えるクエリです(後でそれを桁の長さでソートします)。
'substr(digits、2、length(digits)-1)'に関数ベースのインデックスを作成し、クエリにwhere句を追加すると、 'substr(digits、2、length(digits)-1 )<= PHONE_NR'あなたはいくつかの改善を見ることができます –
'とsubstr(数字、1、長さ(数字)-1)<= PHONE_NR'( '+'を削除する必要はありません) –