SQL查询中的多个连接

时间:2014-01-07 20:14:09

标签: sql-server join timeout

我正在尝试从多个表运行查询,我遇到了一个问题,查询花了10多分钟才提供3条记录。查询如下:

select TOP 100 pm_entity_type_name, year(event_date), 
      pm_event_type_name, pm_event_name, pm_entity_name, 
      pm_entity_code, event_priority, event_cost 

from pm_event_priority, pm_entity, pm_entity_type, pm_event_type, pm_event 

where pm_event.pm_event_id = pm_event_priority.pm_event_id 
   And pm_entity.pm_entity_id = pm_event_priority.pm_entity_id 
   And pm_entity_type.pm_entity_type_id = pm_entity.pm_entity_type_id  
   And pm_event_type.pm_event_type_id = pm_event_priority.pm_event_type_id  
   And ( pm_entity.pm_entity_type_id = '002LEITUU0005T8EX40001XFTEW000000OZX' OR
         pm_entity_type.parent_id= '002LEITUU0005T8EX40001XFTEW000000OZX' ) 
ORDER BY 1,2,3

我想知道,有什么方法可以修改此查询以使查询更快一些吗?

2 个答案:

答案 0 :(得分:0)

当您必须将多个大型表连接在一起时,查询性能可能会变得很快,特别是当连接列未正确编入索引时。在您的情况下,我怀疑您的表格很大(很多行)并且_id列没有编入索引。

如果您使用的是SQL Server Management Studio,则可以单击“显示估计的执行计划”以查看查询优化程序如何解释您的查询。如果您看到一堆Table Scans而不是Index Scans / Seeks,这意味着SQL Server必须读取表中的每一行;表演噩梦!尝试在每个表的_id列(可能是聚簇索引)上放置一些索引,和/或使用数据库引擎优化顾问自动推荐应用于表的最佳索引结构,以提高此查询的性能。

答案 1 :(得分:0)

您需要查看查询计划。请参阅this question了解如何获取它。

一旦你有了一个查询计划,看看你是否可以从列表中看出这么慢。由于缺少索引,可能会有表扫描。

如果您使用相同的条件取出TOP 100并执行SELECT *会怎样?如果您收到大量数据,可能会缺少连接条件。

相关问题