Это вопрос, который у меня был навсегда.MySQL-индексы и их заказ
Насколько я знаю, порядок индексов имеет значение. Таким образом, индекс, такой как [first_name, last_name]
, не совпадает с [last_name, first_name]
, правильно?
Если бы я только определить первый индекс, это означает, что она будет использоваться только для
SELECT * FROM table WHERE first_name="john" AND last_name="doe";
и не
SELECT * FROM table WHERE last_name="doe" AND first_name="john";
Поскольку я использую ОРМ, я понятия не имею, в которые упорядочивают эти столбцы. Означает ли это, что мне нужно добавлять индексы во все перестановки? Это выполнимо, если у меня есть индекс с двумя столбцами, но что произойдет, если мой индекс находится на 3 или 4 столбцах?
Итак, я думаю, SELECT * FROM table WHERE last_name = "doe" AND first_name = "john" не будет? Если это так, то, поскольку все здание запроса скрыто моим ORM, мне, вероятно, нужно определить 2 индекса ... что действительно отстойно, потому что у меня есть индекс на 3 столбцах, чтобы определить ... –
Нет, вы неправильно поняли. WHERE 'last_name' =" doe "И запрос' first_name' = "john" будет использовать либо ('first_name',' last_name'), либо ('last_name',' first_name') индексы просто отлично. – ChssPly76
Вопрос: для запроса с условием 2 И, имеет ли значение, скорость мудрая, индекс инвертирован по сравнению с условиями в запросе или нет? Или это зависит от мощности этих столбцов? – Mihai