MySQL - Почему этот запрос не использует индекс (согласно объяснению) - PullRequest
2 голосов
/ 11 октября 2011

Я играл с EXPLAIN и запустил его по этому простому запросу:

EXPLAIN SELECT * FROM actions WHERE user_id = 17;

И был очень удивлен, увидев этот вывод:

select_type    SIMPLE
table          actions
type           ALL
possible_keys  user_id
key            null
key_len        null
ref            null
rows           6
extra          Using where

Насколько я понимаю, это означает, что индекс не используется при поиске, верно? (В данный момент в таблице всего 6 строк, но их будет гораздо больше)

Определение таблицы (входная):

CREATE TABLE `actions` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  ...
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1

Почему бы не использовать значение ключа для user_id?

1 Ответ

5 голосов
/ 11 октября 2011

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

Не забывайте периодически запускать ТАБЛИЦА ОПТИМИЗАЦИИ и ТАБЛИЦА АНАЛИЗА , когда у вас будет более реалистичный набор данных.

Если вы считаете, что можете выполнять работу лучше, чем оптимизатор, вы можете использовать синтаксис Index Hint .

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