Полагаю, речь идет только о
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
любого типа.