Насколько индекс ускоряет выборку с условием-неравенством?

SELECT * FROM `mytable` WHERE `time`>=1661400000 AND `time`<=1661433377 AND ...;

Будет ли этот запрос быстрее работать, если для столбца `time` есть индекс? Вообще насколько целесообразно делать индексы на все столбцы, которые есть в условии выборки и в которых много уникальных значений?
  • Вопрос задан
  • 159 просмотров
Решения вопроса 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега MySQL
Будет ли этот запрос быстрее работать, если для столбца `time` есть индекс?
Это покажет EXPLAIN, а ещё лучше - само выполнение запроса с индексом и без него. Скорее всего - будет.

Вообще насколько целесообразно делать индексы на все столбцы, которые есть в условии выборки и в которых много уникальных значений?
В этом и заключается смысл индексации.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
EXPLAIN вам в руки. Универсального алгоритма нет, СУБД сама решает, когда и какие индексы использовать. ЕМНИП, MySQL использует для этого селективность выборки и накопленную статистику использования таблицы.
https://dev.mysql.com/doc/refman/8.0/en/optimizati...
Ответ написан
Комментировать
Fragster
@Fragster
помогло? отметь решением!
Загугли "селективность". Нужно сделать индекс на колонку с наибольшей селективностью (отсекающую наибольшее количество записей). Или составной индекс на несколько таких колонок в порядке убывания селективности, но это иногда не дает большой эффективности, надо тестировать каждый конкретный случай.
Если "наборов условий" несколько, то возможно потребуется несколько индексов.
Плюс важно соблюдение баланса - увеличиваются затраты на вставку и используемое место (вплоть до того, что индексы занимают больше, чем сами данные). В отдельных случаях (под особо часто используемые и при этом ресурсоемкие запросы) можно создавать покрывающие индексы, когда к индексу добавляются колонки, участвующие в select. Для select * ,естественно, неприменимо.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы