У меня вопрос, есть ли таблицы с тремя столбцами (имя, фамилия, адрес) в виде строки /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"
Спасибо
Прежде всего: если вы добавите свой запрос с ключевым словом "EXPLAIN", он распечатает все индексы, которые он может использовать, и какой из них выбрать MySQL. По моему мнению, да, он будет использовать индекс. Порядок полей в запросе не имеет значения.
Что важно, так это порядок в индексе, но только если вы не предоставляете все поля в запросе (или применяете функцию к значению или используя, например, аналогичный оператор для остальной строки). Если, например, вы запрашиваете только имя lastname
, индекс не может быть использован. Если вы запрашиваете firstname
, будет использоваться индекс. Если запрашиваются firstname
и address
, индекс будет использоваться, и так далее...
INDEX
имеет значение в некоторых других случаях -WHERE firstname LIKE 'M%' AND lastname='Schneider'
требуетсяINDEX(lastname, firstname)
.=
первый столбец (столбцы); использование индекса прекращается с помощью «диапазона» (такого какLIKE
).TRIM(lastname) = 'James'
, тогда индекс также не будет использоваться.