我有一個包含15,000,000條記錄的表。這些記錄可以基於某些匹配字段(通常是單個組中的最大值3或4)相互關聯。每個記錄也有一個與之相關的日期,但是這個日期並不一定與它加載到表格中的日期/訂單相關。與大型數據集的視圖與索引表的性能
這些記錄定期用於更新數據庫中的其他記錄。儘管如此,我只關心最新的唱片,並且在1500萬條唱片(正在更新1000萬條唱片)上,我想確保我忽略了其他所有內容。如果最新記錄已經有「更新」標誌,我也想跳過更新。
我一直在使用這樣的一個觀點,收集各組內的最新記錄:
SELECT a, b, c, max(scan.timestamp) AS latest_scan
FROM scan
GROUP BY a, b, c;
然後我用一個WHERE
子句中我UPDATE
忽略具有更新標誌的任何記錄。
有了這麼多的記錄,我可以使用視圖嗎?我已經看到人們開始創造真正的索引表,以提高性能,但我仍然認爲這需要很長時間。這是我可以從中受益嗎?
我的錯誤 - 它應該是GROUP BY而不是ORDER BY。你說這個視圖會被用來給優化器信息 - 當使用視圖時,它是否考慮到它基於的表的索引? –
基本上所有的視圖是,就查詢引擎而言是一個帶有名稱的查詢,所以基本上它把select *從MyView看作select * from(視圖中的sql),所以它確實使用了基礎表指數。 –