我有一个包含三列的数据库表:ID,时间戳和字符串。每天大约插入14,000行,因此表格非常大。它目前有130万行。
表格定义:
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秒才能执行。如何修改表和/或查询以使其更快?
感谢。
答案 0 :(得分:5)
在ts
上向表格添加新索引。
答案 1 :(得分:1)
我想到的唯一事情就是partitions假设你把一切都搞定了。您也可能想尝试不同的数据库引擎(例如InnoDB)。或者在ts列中设置索引。
除此之外 - 使用&gt; =&lt; = vs BETWEEN不会对性能产生任何影响,所以不要担心。
答案 2 :(得分:0)
您可以使用自动增量的主要ID来订购结果。
答案 3 :(得分:0)
尝试以下查询..如果索引是id,则可能更快
declare @min_id as int
declare @max_id as int
select @min_id = min(id)
from readings WHERE ts = 'TIME_START'
select @max_id = max(id)
from readings WHERE ts = 'TIME_END'
SELECT * FROM readings
id between @min_id and @max_id order by id