H2データベースで実行されているSQLのようなクエリがあります。
select columnA from table
where :param like columnB || '%'
order by char_length(columnB) desc
limit '1' offset '0'
問題は、columnA と columnB がインデックス化されているにもかかわらず、このクエリがフル テーブル スキャンを実行することです。これは、where 句の後に列名ではなくパラメーターが続くためだと思います。以下のクエリの Explain Analyst を使用すると、インデックス作成がデータの選択に使用されていることがわかりますが、それは私が望むものではありません。
select columnA from table
where columnB like :param || '%'
order by char_length(columnB) desc
limit '1' offset '0'
-- Note: This query is not an option.
私のアプリケーションではパフォーマンスが非常に重要であり、完全なテーブル スキャンは手頃な価格ではありません。このクエリを最適化してパフォーマンスを向上させるにはどうすればよいですか?