Переведите index_id на имя индекса - PullRequest
1 голос
/ 13 августа 2011

Системная функция sys.dm_db_index_physical_stats возвращает фрагментацию всех индексов на сервере.Вместо имен он возвращает id таблиц и индексов.Имена баз данных, схем и объектов можно найти с помощью db_name, object_schema_name и object_name:

select  db_name(ips.database_id)
,       object_schema_name(ips.object_id, ips.database_id)
,       object_name(ips.object_id, ips.database_id)
,       ips.index_id
,       ips.avg_fragmentation_in_percent
from    sys.dm_db_index_physical_stats(null, null, null, null, null) ips

Функция object_name не работает для индексов.Соединение с sys.indexes работает, но оно зависит от базы данных, поэтому вам нужно запустить его в курсоре с динамическим SQL.

Есть ли лучший способ перевести index_id в имя индекса?1014 *

Ответы [ 2 ]

0 голосов
/ 10 августа 2016

системное представление dm_db_index_physical_stats содержит столбец object_id.Это идентификатор объекта (таблицы) в таблице sysobjects.Таким образом, вы можете просто посмотреть это так:

SELECT name FROM sys.sysobjects WHERE id = 'add object id here'

name будет именем таблицы.Очевидно, это также можно превратить в INNER JOIN, чтобы предотвратить дополнительный вызов.

0 голосов
/ 13 августа 2011

Вместо использования sys.dm_db_index_physical_stats без набора параметров базы данных, почему бы не выполнить цикл по списку баз данных из sys.databases, извлеченных во временную таблицу, а затем запросить статистику индекса для определенных баз данных.* * * * * * * * * * * * * * * * * * * * * * * * * * * *.

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