Какова лучшая стратегия БД для индексации столбцов? - PullRequest
0 голосов
/ 19 декабря 2009

Два примера:

  1. Столбцы, которые будут отображаться в запросе where (где Name = "xtz")
  2. Столбцы, по которым вы будете заказывать (сортировать) запросы

Правильно ли это и существуют ли другие важные случаи использования?

Может ли SQL Server рекомендовать поля для индексации на основе шаблонов использования?

Ответы [ 6 ]

3 голосов
/ 19 декабря 2009

Вы узнаете, недостаточно ли ваша производительность.

То, что вы упоминаете, уже является частью решения. В дополнение к этим двум, я бы также добавил:

  • поставить индекс для любых столбцов внешнего ключа в дочерней таблице

Это очень помогает при выполнении JOIN, и не автоматически выполняется SQL Server (вопреки распространенному городскому мифу, SQL Server never автоматически ставит любые индексы на внешние ключи).

Да, начиная с SQL Server 2008, если вы включите фактический план выполнения в свой запрос в SQL Server Management Studio, он может дать вам несколько советов относительно того, какие индексы могут помочь.

НО ОСТОРОЖНО: при этом вы просто настраиваете один SQL-запрос. Вы можете настроить это на Луну и обратно, но при этом все еще иметь ужасную производительность, поскольку один запрос часто не является целой историей, и настройка одного запроса на выполнение чрезвычайно хорошо может отрицательно повлиять на остальную систему.

Чтобы ДЕЙСТВИТЕЛЬНО знать, что настраивать и как это настраивать, вам необходимо собирать данные о фактическом использовании в реальном времени, используя трассировщики профилей SQL Server, в течение продолжительного периода времени и в разное время дня, в течение которого ваша система работала. в использовании, и изучите их.

Прочтите о профилировании SQL Server:

Марк

1 голос
/ 19 декабря 2009

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

1 голос
/ 19 декабря 2009

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

1 голос
/ 19 декабря 2009

Сортировка и запросы являются «обязательными» почти для всех индексов в время разработки . Вы должны быть осторожны с индексами для таблицы, которую вы делаете кластеризованной, чтобы не вводить задержки вставки / обновления.

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

1 голос
/ 19 декабря 2009

Это единственные причины для индексации.

Так как «модель использования» очень трудно определить количественно - и она варьируется - невозможно сделать общий оператор для индексов.

Индекс, который сильно обновляется (или удаляется), становится дороже, чем выгода.

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

Требуется активный эксперимент, чтобы определить, является ли сочетание индексов оптимальным для текущего шаблона использования вашей базы данных. Это означает, что нужно посмотреть на планы выполнения запросов, чтобы увидеть, что используется, и посмотреть на медленные запросы, чтобы увидеть, что может отсутствовать.

0 голосов
/ 21 декабря 2009

Вы должны почти всегда индексировать внешние ключи (первичные ключи индексируются автоматически, а Fks - нет). ФК обычно используются в соединениях и поэтому должны быть проиндексированы.

...