性能恢复大MySQL表的数据

时间:2015-06-26 14:49:46

标签: mysql sql performance innodb

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

这是我的结构:

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

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

它在运行最新版MySQL社区的Windows上运行。 计算机有8GB的RAM,我改变了这个配置:

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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

对于那个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日的大部分时间都没有。

相关问题