2010-05-28 4 views
2

Содержимое веб-сайта хранится в базе данных MySQL. 99% содержимого будет включено, но некоторые (пользователи, сообщения и т. Д.) Будут отключены. Большинство запросов заканчиваются как WHERE (...) AND enabledиндекс 'enabled' поля хорошая идея?

Это хорошая идея создать индекс в поле «включено»?

ответ

1

Было бы нецелесообразно создавать индекс только на enabled. Но может быть полезно создать составной индекс, в который включен enabled, для достижения ORDER BY optimisation.

Например, если что-то подобное было обычным запрос:

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, то все условие WHERE и ORDERing можно было бы взять непосредственно из индекса, давая более быстрые результаты.

Как всегда, это будет зависеть от того, какие запросы вы делаете; вы должны EXPLAIN ваши самые общие запросы, чтобы точно проверить, что он делает.

+0

Ваши мысли были именно тем, чего не хватало, чтобы сделать точку. Я решил добавить поля с включенными полями в таблицы, где ожидаю огромные наборы результатов. Поскольку всегда существует предложение ORDER, это уменьшит время сканирования для разрешенных строк. Но для таблиц, где я ожидаю только нескольких совпадений, одно-на-одно сканирование не изменит ситуацию. – sibidiba

Смежные вопросы