Можно ли автоматизировать создание табличных индексов MS Sql Server 2005+? - PullRequest
0 голосов
/ 08 марта 2009

Я читал статью Иана Стирка "Раскрытие скрытых данных для оптимизации производительности приложений" в журнале MSDN, и теперь мне интересно, можно ли автоматизировать создание табличных индексов, как это делает Google AppEngine для своей BigTable.

Существует ли какой-либо инструмент или функция сервера Sql, которая автоматизирует создание индекса таблицы?

Ответы [ 4 ]

3 голосов
/ 09 марта 2009

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

Но, если вам хочется сделать снимок самостоятельно, я рекомендую вам начать смотреть на представления производительности в SQL Server.

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

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

sys.dm_exec_cached_plans, sys.dm_exec_query_plan, sys.dm_exec_query_stats и sys.dm_exec_sql_text должны показывать выполненные вами запросы и их выполнение, а вместе с информацией из других таблиц вы, вероятно, сможете узнать, какие из них требуют дополнительной работы.

На самом деле, я смутно припоминаю какого-нибудь мастера, который может помочь вам проанализировать производительность в Профилировщике, возможно, не автоматически, но, возможно, это можно будет включить в план обслуживания.

3 голосов
/ 09 марта 2009

Нет, насколько мне известно, в SQL Server нет функции, позволяющей автоматически создавать индексы таблиц.

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

Конечно - вы можете поместить первичный ключ в любой столбец с именем «ID» - пока не столкнетесь с ситуацией, когда вам нужен первичный ключ для чего-то еще ...

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

Получение правильных индексов слишком зависит от вашего фактического использования и большого количества динамических параметров использования (и дизайнерских решений с вашей стороны тоже), поэтому я был бы удивлен, если какое-либо решение действительно сработает хорошо ...

Марк

2 голосов
/ 14 апреля 2011

Я рад, что вам понравилась моя статья!

В моей новой книге о производительности SQL Server через DMV (www.manning.com/stirk) в главе 10 вы увидите скрипт, который позволяет автоматически создавать индексы ... также есть скрипт для удаления неиспользуемых индексы ... вы можете увидеть, как их можно использовать вместе.

Спасибо Ian

0 голосов
/ 03 мая 2012

Я знаю, что это старая ветка, но я подумал, что кто-то может найти это интересным:

http://blogs.msdn.com/b/queryoptteam/archive/2006/06/01/613516.aspx

Несмотря на то, что это звучит потрясающе, я должен учитывать осторожность - индексы могут нанести вред системе настолько, насколько они могут заставить ее летать - используйте только если вы знаете, что делаете!

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