hsqldb select查询真的很慢

Posted

技术标签:

【中文标题】hsqldb select查询真的很慢【英文标题】:hsqldb select query really slow 【发布时间】:2011-02-22 12:51:52 【问题描述】:

我使用 hsqldb 并构建了一个包含 10.000.000 条记录的表的数据库。构建这张表大约需要 15 分钟。然后在另一个需要这些数据的程序中,我尝试读取它们。我认为以 100.000 人为一组阅读它们会更快。所以我执行这个查询:

rs = st.executeQuery("SELECT * FROM PATIENT WHERE pid>="+start+" AND pid<="+end+" ;");

其中 start 和 end 定义了我每次要阅读的组。

我已经在 pid 上建立了索引,但查询执行仍然很慢。实际上它已经运行了 24 分钟,并且从 100 个组中提取了前 24 个。这是正常的吗?我还可以做些什么?

谢谢!

【问题讨论】:

【参考方案1】:

最好以 100000 个为一组进行选择。您可以通过在查询中执行以下语句来验证您的查询是否使用了索引:

EXPLAIN PLAN FOR SELECT ...

如果查询确实使用了索引,可以通过定义加快选择

SET TABLE PATIENT CLUSTERED ON (PID)

或者定义PID为主键

您还应该考虑增加数据库的缓存大小,或增加 nio 文件使用限制,或指南中讨论的其他调整。使用来自http://hsqldb.org/support/的最新 HSQLDB jar

【讨论】:

以上是关于hsqldb select查询真的很慢的主要内容,如果未能解决你的问题,请参考以下文章

使用 NOT IN ( SELECT ... ) 时查询执行速度很慢

当结果很少时 MySQL-select 查询很慢

SQLite 非常慢的 SELECT 时间

HSQLDB:优先选择查询而不是插入查询

如何在 HSQLDB 中使用多行 SELECT 语句导出数据?

如何从 SELECT 加速 HSQLDB UPDATE?