Индекс «включен» поля хорошая идея? - PullRequest
2 голосов
/ 28 мая 2010

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

Является ли хорошей идеей создать индекс для поля 'enabled'?

1 Ответ

1 голос
/ 28 мая 2010

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

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

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

Как всегда, это будет зависеть от того, какие запросы вы делаете; Вы должны ОБЪЯСНИТЬ свои наиболее распространенные запросы, чтобы убедиться, что они делают.

...