我試圖從非常大的Audits表(數百萬行)檢索數據。所以我需要儘可能高效地運行查詢。 首先我有一個子查詢打返回ObjectTypeId並以此來限制對審計表SQL慢子查詢
這個查詢花費4分鐘運行查詢:
select distinct Audits.ObjectTypeID, COUNT(*) as Count
from Audits as Audits
where Audits.ObjectTypeID =
(select distinct ObjectType.ObjectTypeID from ObjectType where ObjectName = 'Data')
group by Audits.ObjectTypeID
如果我在ObjectTypeID默認查詢運行在42秒
select distinct(Audits.ObjectTypeID), COUNT(*) as Count
from Audits
where Audits.ObjectTypeID = 1
group by Audits.ObjectTypeID
但是,當單獨運行子查詢僅只需第二運行。那麼爲什麼第一個查詢需要這麼長時間呢?
你能提供,匿名從SQL事件探查器輸出(?)?或更好地提供*實際*,不是預期的執行計劃? – matcheek
你有'ObjectType.ObjectName'和'Audits.ObjectTypeID'上的索引嗎? –
是否有多個記錄具有'Data'的ObjectName?如果不是,那麼你可以拿出「DISTINCT」,看看是否會產生更有效的計劃。 –