【发布时间】:2014-11-25 05:10:08
【问题描述】:
以下查询的执行速度有很大不同。第二个完成的速度比第一个快几个数量级。
SELECT * FROM A INNER JOIN B ON A.X=B.Y WHERE B.Z=1
SELECT * FROM A INNER JOIN (SELECT * FROM B) ON A.X=B.Y WHERE B.Z=1
如果有人能写出这是为什么,那就太好了。
数据库是HSQLDB 和JDBC。
附加信息:HSQLDB 的版本是 2.3.2。 A.X 列已编入索引,但 B.Y 列未编入索引。
【问题讨论】:
-
你能测试第三个版本吗:
SELECT * FROM A INNER JOIN B ON A.X=B.Y AND B.Z=1? -
@JoëlSalamin 这与第一个慢版本的执行时间大致相同。
-
这可能是因为
B.Y没有被索引。你能试试这个其他版本并告诉我是否有性能增益/损失:SELECT * FROM A INNER JOIN (SELECT * FROM B WHERE B.Z = 1) ON A.X=B.Y -
@JoëlSalamin 这与开篇文章中的第二个示例的行为大致相同。是的,但可能与索引有关。我只是不明白这会是什么方式。
-
你的桌子有多大
B?
标签: sql optimization hsqldb