используя неиндекс с составным индексом

0

У меня вопрос, есть ли таблицы с тремя столбцами (имя, фамилия, адрес) в виде строки /varchar (255)

и у меня есть составной my_idx с 2 столбцами

CREATE INDEX my_idx ON my_table (firstname,lastname)

если я использую sql, будет ли он использовать мой определенный индекс?

select * from my_table where address="zzz" and firstname="xxxx" and lastname="yyyy"

или я должен использовать индексные столбцы, поскольку первое левое большинство условий

select * from my_table where  firstname="xxxx" and lastname="yyyy" and address="zzz" 

Спасибо

Теги:
indexing

1 ответ

1
Лучший ответ

Прежде всего: если вы добавите свой запрос с ключевым словом "EXPLAIN", он распечатает все индексы, которые он может использовать, и какой из них выбрать MySQL. По моему мнению, да, он будет использовать индекс. Порядок полей в запросе не имеет значения.

Что важно, так это порядок в индексе, но только если вы не предоставляете все поля в запросе (или применяете функцию к значению или используя, например, аналогичный оператор для остальной строки). Если, например, вы запрашиваете только имя lastname, индекс не может быть использован. Если вы запрашиваете firstname, будет использоваться индекс. Если запрашиваются firstname и address, индекс будет использоваться, и так далее...

  • 0
    Порядок в INDEX имеет значение в некоторых других случаях - WHERE firstname LIKE 'M%' AND lastname='Schneider' требуется INDEX(lastname, firstname) . = первый столбец (столбцы); использование индекса прекращается с помощью «диапазона» (такого как LIKE ).
  • 0
    Да, я пропустил этот случай в последнем абзаце. Это распространяется даже на случай, когда к значению применяется функция, такая как TRIM(lastname) = 'James' , тогда индекс также не будет использоваться.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню