【问题标题】:Signifiant difference in Speed of SQL with join, vs without?有连接的 SQL 速度与没有连接的显着差异?
【发布时间】: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.LocationIDLocation.LocationIDindexed 字段吗?
  • 是的,它们都被索引了.....我注意到当我删除连接表的条件部分(即:SubType=3 和 AvailableForSPs=True)时,SQL(仍然连接),运行速度和原来一样快,所以现在,我知道了原因,但仍然没有解决方案!
  • 您需要什么解决方案?目前,您给了我们 2 个不同的 SQL 语句。我们不知道您要做什么。

标签: sql ms-access vb6 left-join


【解决方案1】:

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

【讨论】:

  • LEFt 和 INNER Join 类型之间的区别是微不足道的,是的,inner 更快,但运行仍然需要大约 9 秒,而 join 需要 300 秒!
  • 你的外键被索引了吗?
  • 是的,它是....重申我上面评论的内容,只有当我在连接表上设置条件时才会出现减速!
猜你喜欢
  • 2010-09-29
  • 2013-05-19
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
相关资源
最近更新 更多