Индекс «включен» поля хорошая идея?
-
05-10-2019 - |
Вопрос
Содержание сайта хранится в базе данных MySQL. 99% содержимого будет включено, но некоторые (пользователи, сообщения и т. Д.) будут отключены. Большинство запросов заканчиваются как WHERE (...) AND enabled
Является ли хорошей идеей, чтобы создать индекс на поле «включен»?
Решение
Было бы не так много использовать создание индекса только на enabled
в одиночестве. Но может быть полезно создать компонентный индекс, в котором enabled
включен, для достижения Порядок по оптимизации.
Например, если что-то подобное это был общий запрос:
SELECT * FROM things WHERE c1='foo' AND enabled=1 ORDER BY c2
Индекс включен c1
позволило бы быстро найти сопоставленные строки, но все равно должны быть отсортированы на отдельном шаге, используя c2
.
Индекс включен c1, c2
следует позволить заказанию быть сделано из индекса, значительно ускоряя сортировку запросов, но отсутствие enabled
в индексе будет победить это, потому что придется компилировать список совпадающих строк, проиндексированных c1
, тогда Сканируйте каждую строку, чтобы проверить это enabled
прежде чем сортировать результаты c2
.
Если бы индекс был enabled, c1, c2
или c1, enabled, c2
, целое состояние и упорядочение может быть сделано непосредственно из индекса, давая более быстрые результаты.
Как всегда, это будет зависеть от того, какие запросы вы делаете; вам следует ОБЪЯСНЯТЬ Ваши самые распространенные запросы, чтобы проверить, что это делает.