我有一张有 ~ 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 行,但 select 需要大约 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 |
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
奇怪的是它似乎没有使用任何索引......