Имеется таблица:
CREATE TABLE ent_types (
etid int(11) NOT NULL auto_increment,
etypeid int(11) NOT NULL default '0',
is_main enum('0','1') NOT NULL default '0',
etype varchar(255) NOT NULL default '',
PRIMARY KEY (etid),
KEY etypeid (etypeid)
) TYPE=MyISAM;
Вот запрос:
SELECT * FROM ent_types ORDER BY etypeid, etype;
EXPLAIN дает такой результат:
+-----------+------+---------------+------+---------+------+------+----------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+-----------+------+---------------+------+---------+------+------+----------------+
| ent_types | ALL | NULL | NULL | NULL | NULL | 57 | Using filesort |
+-----------+------+---------------+------+---------+------+------+----------------+
Упрощает запрос -- сортировка по индексируемому полю
SELECT * FROM ent_types ORDER BY etypeid;
EXPLAIN:
+-----------+------+---------------+------+---------+------+------+----------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+-----------+------+---------------+------+---------+------+------+----------------+
| ent_types | ALL | NULL | NULL | NULL | NULL | 57 | Using filesort |
+-----------+------+---------------+------+---------+------+------+----------------+
ТО есть, то же самое.
Делаем сортировку по первичному ключу:
SELECT * FROM ent_types ORDER BY etid;
И EXPLAIN показывает то же самое.
Принудительно пытаюсь заставить использовать индекс
SELECT * FROM ent_types USE INDEX (primary) ORDER BY etid;
Картина не меняется.
Как заставить MySQL использовать индекс для сортировки?