Как указать индекс для использования в запросе выбора MySQL?

У меня есть запрос MySQL (под управлением MySQL 5.0.88), который я пытаюсь ускорить. Базовая таблица имеет несколько индексов, и для рассматриваемого запроса используется неправильный индекс (i_active — 16 000 строк против i_iln — 7 строк).

Я не очень разбираюсь в MySQL, но читал, что есть подсказка use index, которая может заставить mySQL использовать определенный индекс. Я пытаюсь это сделать так:

 SELECT art.firma USE INDEX (i_iln)
 ...

но это вызывает ошибку MySQL.

Вопрос:
Может ли кто-нибудь сказать мне, что я делаю неправильно? (За исключением версии 5.0.88, которую я не могу изменить.)


person frequent    schedule 31.07.2012    source источник
comment
Что бы это ни стоило, USE INDEX не заставляет использовать именованный индекс. Это просто означает, что не следует использовать какой-либо другой индекс. Указанный вами индекс может не иметь отношения к запросу, и в этом случае MySQL все равно не будет его использовать.   -  person Bill Karwin    schedule 21.01.2014


Ответы (4)


Вы пропустили

FROM table

Правильный SQL должен быть:

SELECT art.firma FROM your_table USE INDEX (i_iln) WHERE ....
person Raptor    schedule 31.07.2012
comment
ах... 2100 мс до 0 мс. Прохладный! - person frequent; 31.07.2012

select * from table use index (idx);

http://dev.mysql.com/doc/refman/5.0/en/index-hints.html

person Markus Mikkolainen    schedule 31.07.2012

иногда с использовать индекс (имя_индекса) оптимизатор может перейти к сканированию таблицы, если вы используете подсказку форсировать индекс, оптимизатор будет вынужден использовать индекс, будет выполнять только сканирование таблицы если не осталось способов получить строки с указанным индексом.

SELECT art.firma FROM art FORCE INDEX (i_iln);

для получения более подробной информации о подсказках USE INDEX и FORCE INDEX проверьте это ссылка

person MikA    schedule 11.01.2019

Выберите Столбец1, Столбец2, Столбец.... ОТ ИМЯ_ТАБЛИЦЫ ИСПОЛЬЗОВАТЬ ИНДЕКС(имя_индекса) ГДЕ< /strong> Столбец = "условие";

если у вас есть правильный индекс, вам не нужно использовать index(). ваш запрос автоматически выбирает правильный индекс. Если ваш запрос замедляется после использования индекса, перепроверьте свой индекс, что-то не так в индексе. заранее спасибо. введите код здесь

person kuldeep upadhyay    schedule 29.05.2017
comment
Ваш ответ выиграет от некоторого редактирования в сторону удобочитаемости, некоторого форматирования и некоторого удаления текстовых фрагментов, которые выглядят как неиспользуемые заполнители шаблонов. - person Yunnosch; 29.05.2017
comment
Добро пожаловать в СО. Прочтите это как ответить и следуйте приведенным там рекомендациям, чтобы дать качественный ответ. - person thewaywewere; 29.05.2017