Имеет ли смысл заводить отдельный индекс для колонки?
Если уже есть индекс по этой колонке в другом составном индексе, причем эта колонка стоит на первом месте?
Т.е. примерно:
index1: news_id BTREE Нет Нет news_id 77728 A Нет
index2
main_thumb BTREE Нет Нет news_id 86364 A Нет
status 97160 A Нет
ctr 518188 A Нет
В целом в последних версиях MySQL появились merge-индексы, так что в принципе составные индексы можно использовать только для реально критичных выборок.
В том то и дело, что если удалить индекс "news_id" то будет использоваться "main_thumb" для простого запроса типа SELECT `path` FROM `images` WHERE `news_id`=555;
Т.е. получается что не составной индекс и не нужен вовсе. Но с другой стороны. У меня очень поверхностное понимание о том, как устроен поиск по индексам внутри мускуля. М.б. там будут участвовать в проверке и другие колонки(status и ctr) для этого запросов. ТОгда получается небольшой оверхед.
explain на этот вопрос не ответит
оверхед и большой будет при лишнем отдельном индексе на колонку:
-) занимает место
-) обновляется
-) оптимизатор выбирает какой из индексов лучше использовать
по индексам хорошо написано в книжке Зайцева "оптимизация производительности mysql" (есть в сети)
retvizan: explain покажет какие индексы используются, так что очень даже поможет. В простом случае можно просто обновиться до mysql 5.7, повесить отдельные индексы на все поля учавствующие в выборках и дальше mysql сам будет объеденять выборки. А вот для критически важных запросов уже можно составные вешать. С точки зрения скорости разработки и выхлопа пока это самая продуктивная стратегия.
Сергей Протько: ну покажет explain, что решил использовать, например, отдельный индекс. И чем это поможет? Это стоит расценивать как нужность отдельного индекса?
Стратегия хреновая. Merge затратная операция. Умел он это и раньше, но делал крайне редко.