【发布时间】:2023-03-15 23:01:01
【问题描述】:
我们有以下 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 毫秒才能运行。我可以添加什么索引来加快速度?
谢谢!
【问题讨论】:
-
300 毫秒遍历 3.5 亿行是相当不错的。也许您需要考虑升级硬件以满足您的性能规格。
-
在
value字段上也使用INDEX? -
它实际上有 1.5 亿行,但问题是查询对某些符号运行得非常快,但不是全部......
-
您现在拥有的似乎是此查询的最佳索引
标签: mysql optimization indexing