我们有以下 MySQL 表,大约有 1.5 亿行:
CREATE TABLE `data` (
`datetime` datetime NOT NULL,
`value1` decimal(12,6) NOT NULL,
`value2` decimal(12,6) NOT NULL,
`value3` decimal(12,6) NOT NULL,
`value4` decimal(12,6) NOT NULL,
`value5` decimal(12,6) NOT NULL,
`symbol_id` int(11) NOT NULL,
PRIMARY KEY (`symbol_id`,`datetime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1.5 亿行均匀分布在 9500 个符号之间,由 symbol_id 指定。
我正在尝试在表上运行以下查询:
SELECT datetime FROM data WHERE symbol_id = 1234 AND datetime <= "2013-03-01 15:00:00" ORDER BY datetime DESC LIMIT 1
对查询返回运行 EXPLAIN:
id: 1
select_type: SIMPLE
table: data
type: range
possible_keys: PRIMARY
key: PRIMARY
key_len: 12
ref: NULL
rows: 23856
Extra: Using where; Using index
查询平均需要大约 300 毫秒才能运行。我可以添加什么索引来加快速度?
谢谢!
最佳答案
正如戈登所暗示的那样,没有索引可以提高查询的性能。
这并不是说您无法采取任何措施来使其更快 - 调整您的 DBMS 和操作系统 I/O - 您没有提供有关其当前配置方式、运行方式以及使用模式的任何信息喜欢。如果您还没有开始这个过程,那么针对您的安装运行 mysqltuner.pl 将是一个好的开始 - 但它并不总是完全正确的。使用不同的引擎可能会提高此查询的性能 - 但这取决于系统上发生的其他一切。
通过将索引分片到多个磁盘和/或使用 SSD 进行索引存储,您将获得巨大 yield 。更多内存几乎总是有帮助的。
去get a good book关于MySQL调优,花点时间阅读一下。
关于mysql - 添加索引优化MySQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180183/