我正在尝试从多个表运行查询,我遇到了一个问题,查询花了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
我想知道,有什么方法可以修改此查询以使查询更快一些吗?
答案 0 :(得分:0)
当您必须将多个大型表连接在一起时,查询性能可能会变得很快,特别是当连接列未正确编入索引时。在您的情况下,我怀疑您的表格很大(很多行)并且_id
列没有编入索引。
如果您使用的是SQL Server Management Studio,则可以单击“显示估计的执行计划”以查看查询优化程序如何解释您的查询。如果您看到一堆Table Scans而不是Index Scans / Seeks,这意味着SQL Server必须读取表中的每一行;表演噩梦!尝试在每个表的_id
列(可能是聚簇索引)上放置一些索引,和/或使用数据库引擎优化顾问自动推荐应用于表的最佳索引结构,以提高此查询的性能。
答案 1 :(得分:0)
您需要查看查询计划。请参阅this question了解如何获取它。
一旦你有了一个查询计划,看看你是否可以从列表中看出这么慢。由于缺少索引,可能会有表扫描。
如果您使用相同的条件取出TOP 100
并执行SELECT *
会怎样?如果您收到大量数据,可能会缺少连接条件。