Какой индекс мне выбрать? (Mysql) - PullRequest
2 голосов
/ 13 ноября 2011

Таблица:

CREATE TABLE `table1` (
  `f1` int(11) NOT NULL default '0',
  `f2` int(4) NOT NULL default '0',
  `f3` bigint(20) NOT NULL default '0',
  PRIMARY KEY  (`f1`)
) TYPE=MyISAM

Запрос:

select `f1` from table1 where `f2`=123 order by `f3` desc;

Я хочу создать «индекс покрытия» для этого запроса

ALTER TABLE `table1` ADD INDEX (`f2`,`f3`,`f1`);

или

ALTER TABLE `table1` ADD INDEX (`f2`,`f1`,`f3`);

какой мне выбрать?

Ответы [ 2 ]

2 голосов
/ 13 ноября 2011

Первый.MySQL может использовать любой индекс для получения результирующего набора без необходимости чтения из фактической таблицы.Первый индекс немного более эффективен, потому что нет необходимости выполнять дополнительный шаг переупорядочения строк.

0 голосов
/ 13 ноября 2011

для вашего запроса вам нужен индекс только для f2.

если вы выполняете запрос с условным выражением типа "где f1 = 12 и f2 = 15", вы могли бы хочу индексировать по f1 и f2 тоже.Однако может быть так, что первичный ключ даст вам результаты быстрее, в зависимости от данных и завершенного запроса.

вам (может) понадобится индекс, охватывающий 3 поля, если у вас есть запросы в диапазоне от 3 (впредложение where).

За 15 лет я никогда не сталкивался с необходимостью создания индекса только для упорядочивания результатов.Эта операция довольно быстрая.Что медленно, так это поиск строк (предложение where), и другой набор совпадает (объединяется).

Теперь, если вы не уверены, создайте оба.Вы запрашиваете и проверяете с помощью объяснения_плана, который использует MySQL.Затем бросьте другой ^^.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...