2014-01-07 107 views
0

我試圖從多個表中運行一個查詢,並且在查詢超過10分鐘以提供3條記錄時遇到問題。查詢如下:在SQL查詢中多次連接

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 

我不知道,有沒有什麼辦法可以修改此查詢可能使查詢更快一點?

+1

表上的索引是什麼? – David

回答

0

當您必須將許多大型表連接在一起時,特別是在連接列未正確編制索引時,查詢性能可能會變差。在你的情況,我懷疑你的表是相當大(很多行),_id列沒有索引。

如果您使用的是SQL Server Management Studio,則可以單擊「顯示估計執行計劃」來查看查詢優化器如何解釋您的查詢。如果您看到一堆表掃描而不是索引掃描/查找,這意味着SQL Server必須讀取表中的每一行;一場表演噩夢!嘗試在每個表的_id列(可能是聚簇索引)上放置一些索引,和/或使用數據庫引擎優化顧問自動建議最佳索引結構應用於表以提高查詢的性能。

0

您需要查看查詢計劃。有關如何獲取它,請參閱this question

一旦你有一個查詢計劃,看看你是否可以從列表中知道什麼是如此之慢。由於缺少索引,有可能發生表掃描。

如果您使用相同的標準取出TOP 100並執行SELECT *會發生什麼?如果返回的數據量很大,可能會缺少連接標準。