我有一个包含约 1.500.000 条记录的表:
CREATE TABLE `item_locale` (
`item_id` bigint(20) NOT NULL,
`language` int(11) NOT NULL,
`name` varchar(256) COLLATE utf8_czech_ci NOT NULL,
`text` text COLLATE utf8_czech_ci)
PRIMARY KEY (`item_id`,`language`),
KEY `name` (`name`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
以 item_id
、language
作为主键和 name
的索引,大小为 255。
使用以下查询:
select item_id, name from item_locale order by name limit 50;
虽然只需要 50 行,但选择事件大约需要 3 秒。
我能做些什么来加速这样的查询?
编辑:你们中的一些人建议添加一个索引。我在上面提到过,name
列的索引大小为 255。
我在命令上运行了 explain
:
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
| 1 | SIMPLE | item_locale | ALL | NULL | NULL | NULL | NULL | 1558653 | Using filesort |
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
奇怪的是,它似乎没有使用任何索引......
最佳答案
检索 50 条记录也比较重。将它们限制为 10 因为您正在使用 Order by also..
关于mysql - 简单有序的 MySQL 查询在大表上运行非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14980073/