Как мне найти, какие индексы используются и какой запрос использует индекс? - PullRequest
5 голосов
/ 06 октября 2010

Я использую SQL Server 2008. У меня есть таблицы, в которых есть повторяющиеся индексы (в основном индексы с одинаковым определением). Я хотел знать, возможно ли выяснить, какие запросы используют эти индексы? Я не знаю, почему дублирующие индексы были созданы в первую очередь. Поэтому, прежде чем удалять их, я хочу определить любые запросы, которые их используют.

Еще один вопрос в вышеприведенных случаях: как механизм SQL Server определяет, какой индекс использовать? Как это влияет на производительность?

Спасибо аськи

Ответы [ 3 ]

4 голосов
/ 06 октября 2010

Если в вашей базе данных есть точные дубликаты, удалите их, точка.Удаление дубликатов не принесет никакого вреда, но МОЖЕТ быть нанесено ущербу от существующих дубликатов.

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

Здесьстатья о том, как найти неиспользуемые (и отсутствующие) индексы: http://weblogs.sqlteam.com/mladenp/archive/2009/04/08/SQL-Server---Find-missing-and-unused-indexes.aspx

3 голосов
/ 06 октября 2010

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

Просто убедитесь, что индексы действительно дубликаты:

  • Порядок индексированных полей имеет значение. Индекс для (fname, lname) не совпадает с индексом для (lname, fname)
  • Индекс на (lname) является избыточным, если у вас уже есть индекс на (lname, fname, ... другие поля) (Если идти только слева, порядок здесь также имеет значение)
  • Проверить включенные поля. Подобные индексы могут иметь разные включенные поля для покрытия разных запросов (хотя вы, вероятно, все еще можете объединить их, создав один индекс со всеми включенными полями)
  • Другие свойства индекса могут привести к тому, что один индекс будет вести себя немного иначе, чем другой (кластеризованный? Уникальный? Коэффициент заполнения? Максимальная степень параллелизма? Файловая группа? Авто-пересчитать статистику?) индексы, но все равно стоит понимать различия)
2 голосов
/ 06 октября 2010

С помощью DMV (динамические административные представления) вы определенно можете узнать, какие индексы не используются - те, которые не использовались в течение длительного времени, можно отбросить.

Проверить:

ОдинЕще один вопрос в вышеприведенных случаях: как механизм SQL Server определяет, какой индекс использовать?

Это довольно сложный процесс - оптимизатор запросов SQL Server будет использовать статистику и другие методы, чтобы выяснить, какие индексыбыть полезным для данного запроса.Какой из них он выберет, когда у вас есть два одинаковых, это сложный вопрос .... Я не знаю, честно говоря.

Как это отразится на производительности?

Наличие одинаковых индексов?Они должны поддерживаться в любой операции INSERT, UPDATE и DELETE, которая касается столбцов в индексе - так что вы определенно платите за это снижение производительности.

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