我有〜1,500,000記錄的表:上name
簡單有序的MySQL查詢運行很慢上一大桌
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
作爲主鍵和索引的大小爲255
用下面的查詢:
select item_id, name from item_locale order by name limit 50;
的選擇需要3秒左右的事件,雖然只要求50行。
我能做些什麼來加快這樣的查詢?
編輯:你們中的一些人建議添加一個INDEX。我上面提到的,該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 |
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
奇怪的是,它似乎沒有使用任何索引...
使用'EXPLAIN'查看MySQL如何執行您的查詢。 – 2013-02-20 12:41:31
一個簡單的解決方案是在item_id和name上添加一個覆蓋索引。根據MySQL處理組合索引的方式,單獨在'name'上添加一個索引就足夠了*(讀作:我不知道)* – 2013-02-20 12:45:37
我添加了explain命令的結果。 – 2013-02-20 13:09:45