Оптимизация MySQL: ОБЪЯСНИТЕ «Дополнительный» столбец содержит «Использование Где» - PullRequest
7 голосов
/ 10 августа 2011

Так что я всегда думал, что видеть «Использование Где» в столбце «Extra» - это хорошо.Тем не менее, я планировал обед с коричневой сумкой для моих коллег по интерпретации EXPLAIN, и теперь я не уверен в этом.В документе MySQL об этом говорится в примечаниях об «использовании где»:

Предложение WHERE используется для ограничения строк, которые должны сопоставляться со следующей таблицей или отправляемых клиенту.Если вы специально не собираетесь извлекать или проверять все строки таблицы, у вас может быть что-то не так в вашем запросе, если значение Extra не использует where, а тип объединения таблицы - ALL или index. Даже если вы используете индекс для всех частей предложения WHERE, вы можете увидеть Использование где, если столбец может быть NULL.

Это заставляет меня поверить, что даже еслимое предложение WHERE содержит только части индекса, поэтому MySQL будет по-прежнему проверять строки, если столбцы могут иметь значения NULL.

Это правда?Если так, я должен изменить столбцы, чтобы не включать NULL, если мне это не нужно?Увижу ли я повышение скорости?

1 Ответ

6 голосов
/ 10 августа 2011

Обнуляемые столбцы имеют накладные расходы из-за дополнительной необходимости проверять нулевое условие. если столбец не должен быть нулевым или ваши требования не допускают нулевого значения, тогда определенно сделайте столбец not null.

Что касается индексов, зависит от конструкции индекса. Если индекс определен с помощью (a,b,c) и вы используете b,c в предложении where, этот индекс нельзя использовать, так как a не находится в игре.

...