2008-10-16 3 views
2

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

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

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

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

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

Тогда всегда использовать все 3 ключа в поиск (например. Key1 = MyKey И key2 является NULL AND ключ3 является NULL)

Смотрите также

Exact duplicate post

+0

Возможный дубликат [Несколько индексов и индексов нескольких столбцов] (http://stackoverflow.com/questions/179085/multiple-indexes-vs-multi-column-indexes) – 2012-06-12 00:19:16

ответ

3

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

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

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

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

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

+0

Именно это я и сделал. – 2008-10-16 18:28:41

2

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

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

0

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

  • электронной почты, key1, key2, KEY3

как показатель, что большинство баз данных будет использовать его, если ваш запрос с использованием «email», «email/key1», «email/key1/key2» и т. д., не требуя указать значения Null для отсутствующих полей.

0

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

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

Смежные вопросы