我發現在我的某個存儲過程中似乎是瓶頸查詢。 @Results是約17K行的表變量。它包括一個TimeStamp(日期時間)列和一個值(十進制)列。相關的子查詢性能
相關的子查詢方法是我能想到的第一件事就是完成這個任務,但是性能很差。我想不出一種更好的方式來構建此查詢,而不是使用針對同一個表的相關子查詢來「計算」WHERE子句。任何建議如何可以寫得更好...
我基本上試圖從全部結果的子集中選擇最高值。現在,通過計算小於或等於該值的所有值,將其乘以100,並將其除以@Count,並查看它是否大於百分之一,來將結果記錄包括在子集中。
這裏的查詢:
SELECT TOP 1 @Result = Results.Value
FROM @Results Results
WHERE (100.0 * (SELECT COUNT(1)
FROM @Results Results2
WHERE Results2.Value <= Results.Value)/@Count) >= @Percent
ORDER BY Results.Value ASC
任何建議或幫助,將不勝感激。
謝謝!
不,沒有Results.Value上的索引。結果是一個表變量。你可以添加一個索引到表變量嗎? – 2012-03-23 00:48:20
看起來像你不能,除非你第一次創建時聲明PRIMARY KEY或UNIQUE約束:http://sqlserverplanet.com/sql/create-index-on-table-variable - 如果這不是一個選項,也許你應該首先在'#tempResults'表中存儲'@ Results',你可以*索引。 – 2012-03-23 04:41:38