残念ながら、特定のパターンで終わる文字列の検索は、ほとんどのデータベースでは困難です+。これは、文字列のサフィックスの検索ではインデックスを使用できないためです。これにより、全表スキャンが発生し、数百万行のテーブルでは低速になる可能性があります。
データベースが逆インデックスをサポートしている場合は、文字列キー列に逆インデックスを追加します。それ以外の場合は、リバースインデックスをシミュレートすることでパフォーマンスを向上させることができます。
- 文字列キーを逆に保存するための列を追加します
- RDBMSが計算列をサポートしている場合は、逆キー用に1つ追加します
- それ以外の場合は、キー列から反転列にデータを入力するトリガーを定義します
- 反転した列にインデックスを作成します
- 探している逆の接尾辞を渡して、検索に逆の列を使用します。
たとえば、このようなデータがある場合
key
-----------
01-02-3-xyz
07-12-8-abc
次に、拡張テーブルは
key rev_key
----------- -----------
01-02-3-xyz zyx-3-20-10
07-12-8-abc cba-8-21-70
を検索すると、ENDS_WITH(key, '3-xyz')
が要求されSTARTS_WITH(rev_key, 'zyx-3')
ます。文字列インデックスはプレフィックスによるルックアップを高速化するため、「startswith」ルックアップははるかに高速になります。
+ 1つの注目すべき例外はOracleです。これは、このような状況に特化した
逆キーインデックスを提供します。