如何提高以下查詢的性能:優化相關的更新
update t
set t.recent_5_min = (select MIN(value)
from t t2
where t2.date between t.date - 5 and t.date - 1)
t
有:
- recent_5_min - 錢空 - 當然是空的,因爲它僅獲得由poluplated工作。
- value - money non-null
- date - int,帶有聚集索引的PK。這是桌上唯一的索引。
t
有900K記錄,統計是最新的,查詢需要永久運行。
更新1 - 最初發布的查詢生成的樣本數據。
前:
date value recent_5_min
----------- --------------------- ---------------------
1 10.00 NULL
2 19.00 NULL
3 2.00 NULL
4 9.00 NULL
5 11.00 NULL
後:
date value recent_5_min
----------- --------------------- ---------------------
1 10.00 NULL
2 19.00 10.00
3 2.00 10.00
4 9.00 2.00
5 11.00 2.00
您在這裏使用相關子查詢。它爲't'中的每個記錄執行'min'。看來你不能輕易將它轉換爲不相關的版本。 – makciook
如果將查詢轉換爲'select',並發現它在可接受的時間內運行,那麼有問題的部分就是自身更新。如果「t」表上有觸發器,首先調查它們,如果數據的這種改變不涉及它們,則禁用它們。否則,請嘗試將更新分成約10000行的批次。請參閱[這個SO答案](http://stackoverflow.com/questions/17244360/how-to-update-2-new-columns-created-in-a-table-which-has-more-than-250-million -r/17244402#17244402)。 –
@NikolaMarkovinović你是對的,我喜歡長名 – user1514042