Хорошая индексация по многокритериальным запросам - PullRequest
0 голосов
/ 20 февраля 2011

У меня есть отношение has_many, :through в моей базе данных Rails, а таблица :through имеет следующие важные поля:

Assignment.rb (subset)
company_id
project_id
importance
order

Все эти столбцы интенсивно используются запросами по всей системе. В зависимости от ситуации эти запросы ищут до 4 из этих полей и в различных комбинациях.

У меня есть эти индексы:

company_id
project_id

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

company_id, project_id, importance, order

и система будет просто искать, какую комбинацию ей дают?

1 Ответ

0 голосов
/ 20 февраля 2011

Если вы используете MySQL, если вы создаете индекс для (company_id, project_id, важность, заказ), это означает, что вы можете использовать этот индекс для запросов, используя:

  • company_id
  • company_id и project_id
  • company_id и project_id и важность
  • company_id и project_id и важность и порядок

Но вы не можете индексировать project_id, важность или порядок самостоятельно. Надеюсь, это поможет вам в создании индексов. Если у вас есть зависимость, то создайте для нее индекс. Например, если вы всегда выполняете поиск в порядке важности, создайте индекс (важность, порядок). Помните, что индексы будут использоваться при индивидуальном использовании, поэтому если у вас есть следующие индексы: (company_id), (project_id), (важность), (заказ), вы сможете использовать их при поиске по company_id и project_id пример.

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