【发布时间】:2013-10-03 13:38:23
【问题描述】:
我正在使用 VB6 中的 ADO 来访问 Microsoft 访问数据库中的一个表,该表有大约 320,000 条记录。
以下 SQL(注意没有连接)大约需要百分之三秒的时间来执行。结果是该表中的 320,000 条记录中的 492 条记录!
Select *
From AvailabilityBlocks
Where [Begin] > #02-Oct-2013 12:00:00 AM# AND
(AvailabilityBlocks.Type = 2 OR
AvailabilityBlocks.Type = 3 OR
AvailabilityBlocks.Type=4)
AND ResourceID = 59
ORDER By [Begin], [End]
但是,以下 SQL 大约需要 11 秒才能运行。结果是 320k 条记录中的 363 条。
Select *
From AvailabilityBlocks
LEFT JOIN Location
ON Availabilityblocks.LocationID=Location.LocationID
Where [Begin] > #02-Oct-2013 12:00:00 AM# AND
(AvailabilityBlocks.Type = 2 OR
AvailabilityBlocks.Type = 3 OR
AvailabilityBlocks.Type=4) AND
(SubType=3 and AvailableForSPs=True) AND
ResourceID = 59
ORDER By [Begin], [End]
对此必须有一个合乎逻辑的简单解释,我是否遗漏了一些非常明显的东西?
提前致谢!
【问题讨论】:
-
可能是第一个查询中对 (SubType=3 and AvailableForSPs=True) 的约束?无论如何,这两个查询在功能上看起来并不相同......
-
“SubType=3 和 AvailableForSPs=True”标准是连接表的一部分! (地点)
-
是
Availabilityblocks.LocationID和Location.LocationIDindexed 字段吗? -
是的,它们都被索引了.....我注意到当我删除连接表的条件部分(即:SubType=3 和 AvailableForSPs=True)时,SQL(仍然连接),运行速度和原来一样快,所以现在,我知道了原因,但仍然没有解决方案!
-
您需要什么解决方案?目前,您给了我们 2 个不同的 SQL 语句。我们不知道您要做什么。
标签: sql ms-access vb6 left-join