0

我在 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]        

对此必须有一个合乎逻辑的简单解释,我是否遗漏了一些完全明显的东西?

提前致谢!

4

1 回答 1

0

据我所知,LEFT JOIN 比 INNER JOIN 慢。你需要左连接吗?换句话说,您的键中有任何空值吗?

于 2013-10-03T13:47:59.670 回答