Наилучшая возможная стратегия индексации для БД MySQL - PullRequest
1 голос
/ 07 сентября 2011

У меня есть таблица с 5 столбцами, скажем - A (первичный ключ), B, C, D и E. В этой таблице почти 150 тыс. Строк, и в ней нет индексов. Как и ожидалось, запросы на выбор очень медленные.

Эти запросы генерируются поисковыми запросами пользователя, поэтому он может вводить значения в любое из полей (B, C, D и E), и это запросы типа IN. Я не уверен, какой должна быть хорошая стратегия индексации - иметь индексы для каждого из этих столбцов или иметь их в некоторых комбинациях.

Избирательность каждого из этих столбцов одинакова (около 50). Любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 07 сентября 2011

Запускаете ли вы один и тот же запрос независимо от того, что дает вам пользователь? В этом случае этот запрос должен сказать вам, какие индексы использовать.

Например, если ваш запрос может выглядеть как

SELECT * FROM mytable WHERE
  B IN (...) AND
  C IN (...) AND
  D IN (...) AND
  E IN (...)

В этом случае, когда вы ограничиваете все столбцы, объединенный индекс со всеми пятью столбцами, вероятно, будет в порядке.

В противном случае создайте один индекс для каждого столбца или объедините столбцы, которые вы всегда ограничиваете, в отдельные индексы.

Помните, что если у вас есть комбинированный индекс, например, B и C, тогда запрос, который не ограничивает B, не будет использовать этот объединенный индекс.

0 голосов
/ 07 сентября 2011

, если вы можете сгруппировать два столбца в один индекс, что будет хорошо.Наличие индекса для каждого столбца не так уж и плохо, если вы не запрашиваете декартово произведение, такое как перекрестное соединение.Но лучше не слишком ..

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