2010-07-06 23 views
6

这个查询需要大约一分钟给结果:这个简单的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。

+0

'在MS Access上喷射SQL'< - 我的眼睛!护目镜!他们什么都不做! – 2010-07-06 12:38:24

+0

我猜你的意思是说这架飞机技术有点不足。正如你可以告诉我,我是一个初学者在黑暗中自我教导 - 如果你能对这个评论稍微详细一点,我将不胜感激,因为它可以帮助我理解我正在从事的任务的重要性/完整性。 – Jack 2010-07-06 23:10:11

回答

13

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

+0

好的。所以逗号意味着交叉连接。感谢所有花时间指出的人。现在将花更多的时间用于“开始的sql”书籍。 – Jack 2010-07-06 23:06:07

+0

逗号意味着一个连接,它只是一个交叉连接,因为没有where子句来连接这些表。 – airmanx86 2010-07-07 00:02:07

9

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

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

3

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

如果您有两个包含1000个项目的表格,您将得到一个包含1000000个项目的结果以查找最大值。