我的任務是從資料庫中選擇并匯出大量監控資料到 exceljs
我的資料庫有兩個大表來存盤監控資料。
- 表MonitoringDataInfo(~60M 行):有一些欄位id(pk)、stationId、createdAt和一組索引(stationId asc、createdAt desc)
- 表MonitoringData(~300M 行):有一些欄位id(pk)、dataId、指示器,值,單元和一個索引(DATAID ASC,指示器ASC)
(ID的MonitoringDataInfo是外鍵資料ID的MonitoringData)
我在下面做一個查詢:
SELECT
[Info].[id], [Info].[sentAt], [Data].[id] AS [Data.id], [Data].[indicator] AS [Data.indicator], [Data].[value] AS [Data.value]
FROM
[monitoring_data_info] AS [Info]
LEFT OUTER JOIN
[monitoring_data] AS [Data]
ON [Info].[id] = [Data].[dataId]
WHERE
[Info].[stationId] = N'EKTjhVrZibUE7h55b6tu'
AND [Info].[createdAt] BETWEEN N'2021-10-07 07:14:51.000 00:00' AND N'2021-10-14 07:14:51.000 00:00'
ORDER BY
[Info].[createdAt] ASC;
==> 此查詢在超過10分鐘后回傳69253行。我的問題是:- 我應該如何優化執行時間和資料庫?- 由于上面的執行時間很慢,我必須在 nodejs 中做一些更繁重的任務才能匯出到 excelJs。您能否提出處理此任務的解決方案?先謝謝了!
uj5u.com熱心網友回復:
在以下任一列上創建索引
id, stationId, createdAt, sentAt column of
monitoring_data_info table
and dataId column of monitoring_data table
根據資料,您可以創建索引,特別是在連接列和 where 子句列上
另外,不要使索引超載,因為我可以看到您已經對索引進行了分組,盡管它包含必要的列,但組索引中的其他列可能會導致重新使用資料,同樣建議在剛剛加入的列上建立索引并根據您的發送最近編輯
uj5u.com熱心網友回復:
該查詢是在 Excel 中嗎?
以最少的轉換或查詢將這兩個作業表匯出到資料庫表中可能會更快。然后在資料庫引擎中進行Joining/Grouping,針對此類進行了更優化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/315032.html
