优化H2类SQL查询:where';其中';子句后面不跟列名

优化H2类SQL查询:where';其中';子句后面不跟列名,sql,optimization,h2,Sql,Optimization,H2,我在H2数据库上运行了类似sql的查询 select columnA from table where :param like columnB || '%' order by char_length(columnB) desc limit '1' offset '0' 问题是,尽管columnA和columnB被索引,但此查询仍运行完整表扫描。 我认为这是因为where子句后面不是列名,而是参数。 使用下面的explain Analysis for query,我可以看到索引用于选择数据

我在H2数据库上运行了类似sql的查询

select columnA from table 
where :param like columnB || '%' 
order by char_length(columnB) desc 
limit '1' offset '0'
问题是,尽管columnA和columnB被索引,但此查询仍运行完整表扫描。 我认为这是因为where子句后面不是列名,而是参数。 使用下面的explain Analysis for query,我可以看到索引用于选择数据,但这不是我想要的

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.
在我的应用程序中,性能是非常关键的,而全表扫描是无法负担的。
如何优化此查询以获得更好的性能?

问题是您正在对列使用计算:
columnB | |'%'
查看此类似问题和一个精彩的答案:。这是专为博士后准备的,不过这个主意太棒了。谢谢。这是一个很好的信息。然而,“简单解决方案”仍在进行全表扫描,对我来说太慢了。“text_pattern_ops”看起来不错,但我不确定H2数据库是否有这种操作符类。有什么想法吗?其他解决方案只是假设前缀的字符数有限,而我的情况并非如此。