我有一個巨大的表格,有數百萬行存儲從某些氣象站獲得的值。每行包含收集數值的站點,度量(例如,溫度,噪音水平等),日期和數值本身。只有最大值和最小值的MySQL索引
這是它的結構:
station
:INT(8)metric
:INT(8)date
:日期時間value
:浮動
而這些是我定義的指數:
- PRIMARY KEY:
station+metric+date
- KEY:
metrica
(外鍵)
有時候,我感興趣的檢索最後一次每站都有送一些價值。然後我使用這個查詢:
SELECT station, MAX(date)
FROM MyTable
GROUP BY station
這個查詢非常慢,因爲它必須讀取整個表。如果我爲station +日期添加索引,則查詢現在可以使用它並且變得非常快。但是表格存儲也增加了很多,對於我來說索引所有的日期值並沒有用,因爲我只對最大值感興趣。
所以我的問題是如果有可能創建一個索引來索引一些範圍,理想情況下只跟蹤最大值。
您可能會更好地將這些信息存儲在另一個表格中 - 比如說「Stations」表格 - 並且使用觸發器在每次插入行時更新信息。 –
您可以將PK更改爲「station + date + metric」嗎?在功能上它會是同樣的東西,但實際上它會(幾乎)與添加額外索引時的情況一樣快。 – deroby
@deroby我試過了,實際上這個查詢會立即運行。但是另一個頻繁的查詢,例如「列出一個站的溫度值的一週值」現在執行得更慢(不是很多,大約慢了25%)。鑑於我的應用程序中最後一個更頻繁,我將繼續使用以前的主鍵。謝謝! –