HSQLDB文本搜索性能

HSQLDB文本搜索性能,sql,performance,hsqldb,Sql,Performance,Hsqldb,我在运行简单搜索(约20-30秒)时性能不佳: 以下是我的表的说明: 从库中选择计数(*)=1 628 062 从库中选择平均值(长度(文本))=766个字符 Library.script文件为2.5GB 文本字段已编入索引 我已经做了一个关机契约 库是一个“内存”表 可能不正常的事情: 我没有此数据库的Library.data或.data文件 我已经没有办法让这种查询更快了 有什么建议吗?以最简单的形式编写查询 select text from library where positi

我在运行简单搜索(约20-30秒)时性能不佳:

以下是我的表的说明:

  • 从库中选择计数(*)=1 628 062
  • 从库中选择平均值(长度(文本))=766个字符
  • Library.script文件为2.5GB
  • 文本字段已编入索引
  • 我已经做了一个关机契约
  • 库是一个“内存”表
可能不正常的事情:

  • 我没有此数据库的Library.data或.data文件
我已经没有办法让这种查询更快了


有什么建议吗?

以最简单的形式编写查询

select text from library where position('abc' in text) > 0

我检查了一下,在150万行(但平均长度更短)上,这大约需要一秒钟的时间。它所花费的时间应该比您尝试的要少。

这两个查询都不能使用索引(除了Postgres之外,几乎所有其他DBMS都是如此)。但是对160万行的完整扫描也不需要30秒。但是我认为在HSQLDB中没有什么可以加快这些查询的速度。谢谢fredt,它确实比like和regexp快。然而,它并不像like或regexp那样通用。当然,我们可以在子查询中使用position作为第一级过滤器,在主查询中使用regexp作为第二级过滤器。你看到另一条路了吗?除了你描述的没有别的路了。如果您使用POSITION(…)>0和REGXP_匹配(…),它也可以工作,因为它通常按给定的顺序应用过滤器。是的,POSITION(“…”in…)>0和REGEXP_匹配(…,“.*)提供了最佳性能,可能是最优雅的解决方案:~1.5秒
select text from library where position('abc' in text) > 0