有这么简单的SQL查询应该这么慢的原因吗?

时间:2010-07-06 12:34:16

标签: sql

此查询大约需要一分钟才能显示结果:

SELECT MAX(d.docket_id), MAX(cus.docket_id) FROM docket d, Cashup_Sessions cus

然而这一个:

SELECT MAX(d.docket_id) FROM docket d UNION MAX(cus.docket_id) FROM Cashup_Sessions cus

立即给出结果。我看不出第一个人要做的事情会花费更长的时间 - 我的意思是他们只是检查最大的一个数字列表然后返回它们。还有什么可以做我看不到的?

我正在通过Java在MS Access数据库上使用jet SQL。

3 个答案:

答案 0 :(得分:13)

第一个是在两个表之间进行交叉连接而第二个不是 这就是它的全部内容。

答案 1 :(得分:9)

第一个使用笛卡尔积来形成源数据,这意味着第一个表中的每一行都与第二个表中的每一行配对。之后,它搜索源以找出列中的最大值。

第二个不连接表。它只是从第一个表中找到最大值,从第二个表中找到最大值,然后返回两行。

答案 2 :(得分:3)

第一个查询在获取最大值之前在表之间进行交叉连接,这意味着一个表中的每个记录都与另一个表中的每个记录连接。

如果您有两个表,每个表有1000个项目,那么您将获得1000000个项目的结果以查找最大值。