使用针对大型表的远程WHERE子句优化SQL查询

时间:2013-02-01 15:22:15

标签: sql

我有一个包含三列的数据库表: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秒才能执行。如何修改表和/或查询以使其更快?

感谢。

4 个答案:

答案 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