恢复大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 日的大部分时间。
我在 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 日的大部分时间。