[MySQL, solved] Почему-то не используется индекс
Не скажу, как конкретно в мускуле, но обычно такое возникает, когда CBO по каким-то причинам решает, что прочитать всю таблицу проще
По поводу вот этого
Но почему-то соглашается использовать ключ, если выбираю только одно поле id, без поля ionic.
При выборке только id их можно целиком выбрать по индексу, не прибегая к чтению самих записей с диска
Чтобы форсировать использование, надо писать FORCE KEY (PRIMARY).
Если с ключом правда лучше, то можно попробовать еще analyze table, оно пересчитает распределение ключей в индексе, и оптимизатор запросов может изменить свое мнение о том, надо использовать индекс или нет.
Впрочем, если в базе 15829 строк, и хочется выбрать из них все, кроме первых 100, то mysql прав, в таком запросе индекс только помешает.
Оказалось, действительно анализатор мускуля сбрендил. Изначальная проблема возникла собственно из-за неиспользования мускулем индекса при джоине таблицы самой с собой по индексированному полю. Optimize table и repair table пробовал, а про analyze table забыл. Именно он и помог
Оставить комментарий
doublemother
Когда делаю селект:
Если явно указать USE KEY (PRIMARY ключ всё равно не используется. Попробовал создать индекс по полю weight и в where вместо id наложить условие weight>0 - ключ всё равно не используется. Но почему-то соглашается использовать ключ, если выбираю только одно поле id, без поля ionic.
Кто-нибудь знает, почему так может происходить? Версия мускуля 5.0.51a-3 (Debian).