我有一個數據庫表,它有三列:一個ID,一個時間戳和一個字符串。每天插入大約14,000行,所以桌子非常大。它目前有130萬行。使用針對大型表的範圍WHERE子句優化SQL查詢
表定義:
CREATE TABLE readings (
id int primary key auto_increment,
ts datetime not null, --the timestamp
json text not null --the string
);
我跑的查詢是:
SELECT * FROM readings WHERE ts >= 'TIME_START' AND ts <= 'TIME_END' ORDER BY ts
查詢需要大約45秒執行。如何修改表格和/或查詢以使其更快?
謝謝。
我以爲只有在指定列的特定值而不是值的範圍時,索引才起作用。例如:'WHERE ts ='TIME'' – Michael
@Michael:它可能取決於數據庫,但我通常會認爲這適用於大多數數據庫。對於一個特定的值,性能仍然會更好,但是一系列的值應該可以工作(假設範圍不是太寬) - 我實際上有一個這樣的實例(在Oracle數據庫上),查詢性能從大約60秒,不到一秒鐘。 –
在哪個點被認爲是「太寬」的範圍?你認爲MySQL支持這個嗎? – Michael