MySQL - не использует индекс - PullRequest
4 голосов
/ 23 октября 2009

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

При выполнении:

Explain SELECT a, b, c, d  FROM `table` WHERE d = 4013456

id       select_type     table       type    possible_keys       key     key_len     ref     rows    Extra`
1      SIMPLE          table       ALL     d                   NULL    NULL     NULL    79787   Using where`
index:
d    INDEX       79787

Что-то я не так делаю? запрос внутри объяснения занимает 10 секунд .. кажется, что он должен занимать менее секунды.

Спасибо!

Ответы [ 2 ]

7 голосов
/ 23 октября 2009

Причина, по которой ваш индекс не используется, заключается в том, что d - это varchar (вы упомянули об этом в комментарии), и у вас есть целое число в предложении where. Если вы измените свой запрос на:

SELECT a, b, c, d  FROM `table` WHERE d = '4013456';

будет более вероятно использовать индекс. Но лучшим решением может быть изменение столбца на целое и оставление запроса в покое (если это возможно с учетом других обстоятельств).

2 голосов
/ 23 октября 2009

Если d varchar, вам нужно поместить его в кавычки. Выход из кавычек не будет использовать индекс должным образом.

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