我有一个包含以下结构的约500万行的表:
CREATE TABLE `books` (
`asin` char(10) CHARACTER SET latin1 NOT NULL,
`title` varchar(512) NOT NULL,
...other fields...
PRIMARY KEY (`asin`),
KEY `lang` (`lang`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
我试图在其上运行一个脚本,为此我使用"从书中选择* asin> X限制10000"并记住最后的PK。
我希望这个查询非常快,因为我通过PK查询,但是性能正在慢慢降低,查询花了将近1分钟(在开始时曾经更好)。为什么会这样?
解释示例:
mysql> explain select * from books where asin > 'B000OT86OY' limit 10000;
+----+-------------+-------+-------+---------------+---------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+------+---------+-------------+
| 1 | SIMPLE | books | range | PRIMARY | PRIMARY | 10 | NULL | 4670633 | Using where |
+----+-------------+-------+-------+---------------+---------+---------+------+---------+-------------+
答案 0 :(得分:0)
我能够通过执行ALTER TABLE books ORDER BY asin ASC
来缓解这个问题。我想问题是我的光盘上的行距离很远,所以在完成上述操作后,查询就会立即生效。