恢复大MySQLtable数据的性能

Performance recovering data of big MySQL table

我在 MySQL (InnoDB) 中有一个很大的 table,我遇到了一些性能问题。

这是我的结构:

id        UNSIGNED INT (PK)
tag_id    INTEGER (FK to tags)
value     FLOAT
datetime  DATETIME

UNIQUE INDEX (tag_id, value, datetime)

我每 5 分钟插入 3000 行。此时我有 12.7GB 的信息。

我希望用户看到带有下一个查询或类似查询的图表:

SELECT tags.name, value, datetime
FROM values
INNER JOIN tags ON tag_id = tags.id
WHERE 
    datetime BETWEEN '2015-01-01' AND '2015-06-30'
    AND tag_id = 25
ORDER BY datetime ASC

好吧,这个查询有时很快(不到一秒),有时则需要一分多钟。

运行 在 Windows 上 MySQL 社区的最新版本。 电脑有 8GB 内存,我更改了这个配置:

innodb_buffer_pool_size=3G
innodb_log_file_size=48M
innodb_log_buffer_size=16M

我做错了什么?

关于那个 SELECT 的表现:

INDEX(tag_id, datetime)  -- in this order

有关进一步讨论,请参阅 my blog

建议

WHERE `datetime` >= '2015-01-01'
  AND `datetime`  < '2015-01-01' + INTERVAL 6 MONTH

您错过了 1 月 1 日的全部时间和 6 月 30 日的大部分时间。