оптимизировать MySQL - улучшится ли индекс в этом случае? - PullRequest
0 голосов
/ 24 ноября 2018

Столбец alo имеет крошечный текст (средняя длина: два символа)

Мой самый частый запрос -

select * from table where .... order by alo=''

Будет ли он быстрее, когда я создаю индекс для alo?

Точно содержание alo не имеет значения - упорядочение основано только на вопросе, пусто или нет alo.

Почему это (не) улучшает скорость?

1 Ответ

0 голосов
/ 25 ноября 2018

Полагаю, речь идет только о

select * from table where .... order by alo=''

Случай 1: Индекс отсутствует.Вся таблица всегда будет сканироваться.

Случай 2. Что-то в WHERE может использовать индекс.Тогда этот индекс может помочь.

Случай 3: alo не упоминается в WHERE.Индексирование alo не поможет.MySQL не может использовать индекс, когда индексированный столбец скрывается в функции.В этом запросе alo='' фактически является вызовом функции.

Сказать, что ORDER BY alo может использовать INDEX(alo). И это будет иметь аналогичные результаты.Ну, на самом деле alo='' сортирует пробелы после незаполнений.Так что вам может понадобиться ORDER BY alo DESC, чтобы сначала получить пробелы.Кроме того, значения NULL могут добавить еще одну складку.

Между тем, есть другая оптимизация ... Не используйте TINYTEXT;вместо этого используйте VARCHAR(..) с подходящим макс.(Причина связана с временными таблицами в сложных запросах и может не иметь значения для вашего запроса.) Кроме того, вы не можете индексировать столбцы TEXT любого типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...