Mysql вопросы о разделенных индексах для нескольких столбцов - PullRequest
0 голосов
/ 09 мая 2018

, если вы можете помочь мне, исходя из вашего опыта, ответить на эти вопросы по этим вопросам

1 - если я создал отдельные индексы для 5 столбцов

имя пользователя, страна, created_at, комментарий, статус

и использовал много столбцов в выражении where username = '' and country = '' и comments = ''

будет ли SQL использовать индексы для этих 3 столбцов? так как у каждого есть свой индекс.

2 - если у меня есть многостолбцовый индекс «имя пользователя, страна, создал_кат, комментарий, статус»

и я использовал 2 столбца, где username = '' и status = ''

Я знаю, что он будет использовать имя пользователя, но будет ли он также использовать индекс для статуса?

1 Ответ

0 голосов
/ 20 мая 2018

MySQL почти никогда не использует 2 индекса в одном запросе. (То есть оптимизатор почти никогда не выбирает «объединение индексов».)

Составной (многостолбцовый) индекс, в случае необходимости, лучше, чем два отдельных индекса.

WHERE username = '...' and country = '...' and comment = '...'

обычно получит выгоду от

INDEX(username, country, comments) -- in any order

Для этого WHERE, INDEX(username, country, created_at, comment, status) будет использоваться только первые два столбца. (Если это не «покрытие».)

WHERE username = '' and status = ''

Получит выгоду от любого индекса , начиная с с и username и status в или порядке. Он частично выиграет от составного индекса из 5 столбцов, приведенного выше - первый столбец username. Он будет использовать status только в том случае, если 'cover'.

Индекс «покрытия» - это индекс, который содержит все столбцы, используемые везде в запросе SELECT. Наличие правильных столбцов в правильном порядке в INDEX важнее, чем «покрытие».

Вот мое обсуждение о том, как создавать оптимальные индексы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...