我寫了下面的SQL命令:查詢性能問題與JOIN和RANK()
SELECT *, COALESCE (def.route_step, 'Keine Fehlerinformation') as 'Ausfallort'
FROM QS_WIP_Errors err
LEFT JOIN (
SELECT * FROM
(
SELECT DISTINCT
inspect_time, repair_time, serial_number, station, route_step,
rank() over (partition by def.serial_number order by inspect_time desc) as [Rang]
FROM dbo.View_QS_DEFECTS_Stammdaten def
WHERE route_step NOT LIKE 'Analyse'
) AS def WHERE rang=1) as def
ON err.SERIAL_NUMBER = def.serial_number
WHERE err.state = 2
AND err.ENDTIME >= '2014-10-06 06:00:00.000'
AND err.ENDTIME <= '2014-10-07 06:00:00.000'
我打算做的是:
- 從
QS_WIP_Errors
:讓所有的記錄與state = 2
; - 一段指定的時間;
- 加入屬性爲
serial_number
的那些結果與來自視圖dbo.View_QS_Defects_Stammdaten
的相應記錄; - COALESCE:顯示'
Keine Fehlerinformationen
萬一'JOIN找不到匹配; - from
dbo.View_QS_DEFECTS_Stammdaten
:得到每個def.serial_number
的最新記錄,其中rang=1
; - 除了最後的
route_step
是Analyse
。
上面的查詢做,它的設計的一切 - 但它不能在期望的時間做到這一點(我放棄它在30分鐘後...)
奇怪的是,當我跳過時間限制(即行AND err.ENDTIME >= '2014-10-06 06:00:00.000' AND err.ENDTIME <= '2014-10-07 06:00:00.000'
)查詢在幾秒內執行(即根據需要)。
我試過到目前爲止以提高性能:
- 更換
view_QS_DEFECTS_Stammdaten
由原始表; - 而不是查詢所有列(*)只是選擇一些單柱 - >沒有任何改善
任何人都可以給我一個提示,我怎麼能提高性能???
非常感謝! 我與SQL Server 2012的