Как заставить MySql использовать идекс при сортировке ?

Sergey_Al

Новичок
Как заставить MySql использовать идекс при сортировке ?

CREATE TABLE `authors` (
`author_id` int(11) NOT NULL auto_increment,
`author_letter` int(1) NOT NULL default '0',
`author_name` varchar(255) NOT NULL default '',
PRIMARY KEY (`author_id`),
KEY `author_name` (`author_name`(16)),
KEY `author_letter` (`author_letter`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;
EXPLAIN SELECT * FROM `authors` ORDER BY author_letter
d select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE authors ALL NULL NULL NULL NULL 3 Using filesort
Как заставить MySql использовать идекс при сортировке ?
 

Popoff

popoff.donetsk.ua
даже если в таблице будет много записей, в приведенном примере будет использоваться filesort. Индекс может использоваться только если идет выборка не всей таблицы, а только части ее. Всем известный вариант - с условием where. Другой вариант, о котором не часто задумываются - с условием limit. Но только при использовании лимит индекс должен быть уникальным, иначе все равно будет filesort.

Результаты экспериментов здесь:
http://download.popoff.donetsk.ua/sql.html

В них видно, что индекс использовался только при использовании сочетания уникального индекса c limit.
 

Sergey_Al

Новичок
Автор оригинала: chira
для сортировки трёх записей индекс не нужен
Не совсем я удачный показал пример, на самом деле записей 600 000.


При использовании WHERE результат точто такой:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE se_authors ALL NULL NULL NULL NULL 652032 Using where; Using filesort
-~{}~ 25.07.05 05:35:

Почему индекс author_letter не хочет MySql использовать я не понял, но с author_name всё получилось после того, как убрал ограничение да длину ключа.
Так что в принципе я свою проблему решил :)
 

slach

Новичок
FORCE INDEX в мануале читай
ну и вообще экспериментирую

может там к табличке приджойнить надо что нибудь?
 
Сверху