gpt4 book ai didi

HSQLDB中的SQL INNER JOIN自动优化

转载 作者:行者123 更新时间:2023-12-02 09:05:57 24 4
gpt4 key购买 nike

以下查询的执行速度显着不同。第二个的完成速度比第一个快几个数量级。

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

如果有人能写出这是为什么,那就太好了。数据库是带有 JDBCHSQLDB

其他信息:HSQLDB 版本为 2.3.2。 A.X 列已建立索引,但 B.Y 列未建立索引。

最佳答案

答案是:索引

想象一下,我有一本字典,有人给我一个任务,要求我在其中查找 5000 个单词。这项任务需要我几个小时。
但现在想象一下这本字典是未排序的。我花了很多年才找到其中所有这些词。
计算机速度更快,第一个任务只需要几毫秒,而第二个任务则需要几秒钟。

为什么第一个查询这么慢?

这是因为存在INNER JOIN并且它是在未索引的列上完成的。

为什么第二个查询这么快?

这是因为有子查询。该子查询被具体化到临时表中,并为连接列创建索引。因此,您现在不加入未索引的 B 表,而是加入索引临时表。 HSQLDB 在临时表上创建此索引以使其更容易连接。即使您将连接条件更改为更复杂(例如:A.X = B.Y + 2*B.Z),此查询仍然会很快。这意味着 HSQLDB 在连接条件中使用的表达式上创建索引。

关于HSQLDB中的SQL INNER JOIN自动优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26123098/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com