Отдельные индексы против нескольких индексов полей - PullRequest
2 голосов
/ 16 октября 2008

В настоящее время у нас есть таблица, которую мы используем для отслеживания инициаций. У нас есть поле электронной почты, которое проиндексировано, но у нас также есть три дополнительных ключа, которые пользователь может указать при добавлении новых записей электронной почты. Мы не разрешаем дубликаты, поэтому нам нужно запросить, существует ли уже электронная почта и дополнительные ключи. В настоящее время ключи добавляются в оператор выбора, только если они указаны. В обычном случае указывается только электронная почта, и с помощью индекса она работает довольно быстро. Когда ключи добавлены, производительность падает.

Повлияет ли добавление трех индексов на производительность для других операций? Ключи, вероятно, используются нечасто, поэтому мы не хотим влиять на производительность в этом случае.

  • электронная почта, ключ1
  • электронная почта, ключ1, ключ2
  • электронная почта, ключ1, ключ2, ключ3

Другая идея состоит в том, что мы добавляем 1 ключ.

  • электронная почта, ключ1, ключ2, ключ3

Затем всегда используйте все 3 ключа в поиске (например, key1 = mykey AND key2 - NULL, а key3 - NULL)

См. Также

Точная копия сообщения

Ответы [ 4 ]

3 голосов
/ 16 октября 2008

Лично я бы порекомендовал этот подход.

Попробуйте метод с одним индексом, который покрывает все, если я правильно помню, он все равно будет работать хорошо, если вы только запросите по первому из включенных столбцов. Как только у вас будет индекс, запустите Советчик по индексам.

Затем попробуйте другой маршрут и повторите.

Это действительно зависит от ваших данных.

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

2 голосов
/ 16 октября 2008

Это зависит от того, как часто таблица обновляется и насколько сложны индексы. Если вы сходите с ума от создания индексов, то каждый раз, когда запись вставляется / обновляется / удаляется, каждый индекс должен будет изменяться, чтобы отражать эту информацию.

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

0 голосов
/ 18 октября 2008

Как уже говорили другие, большинство баз данных будут использовать индекс "a, b, c" при поиске только a, a и b или a, b и c. И они часто будут использовать только один индекс на таблицу. Таким образом, добавление «email, key1, key2, key3», вероятно, будет лучшим.

Тем не менее, используйте EXPLAIN, чтобы узнать, что на самом деле происходит. Проверьте, какие индексы, если они есть, используются в ваших запросах. У каждой базы данных есть свои причуды.

0 голосов
/ 16 октября 2008

Я могу ошибаться, но я верю, если вы добавите:

  • электронная почта, ключ1, ключ2, ключ3

в качестве индекса, что большинство баз данных будет использовать его, если в вашем запросе используются «электронная почта», «электронная почта / ключ1», «электронная почта / ключ1 / ключ2» и т. Д., Не требуя указания нулевых значений для отсутствующих поля.

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