Индексы SQL Server. Поиск дубликатов

Время чтения - 2 мин.Дата публикации 13.04.2021

Запрос покажет все дублирующие индексы в базе данных SQL Server

-- Ищем дубликаты индексов (создает нагрузку на процессор)
select t1.tablename,t1.indexname,t1.columnlist,t2.indexname,t2.columnlist from
   (select distinct object_name(i.object_id) tablename,i.name indexname,
             (select distinct stuff((select ', ' + c.name
                                       from sys.index_columns ic1 inner join
                                            sys.columns c on ic1.object_id=c.object_id and
                                                             ic1.column_id=c.column_id
                                      where ic1.index_id = ic.index_id and
                                            ic1.object_id=i.object_id and
                                            ic1.index_id=i.index_id
                                      order by index_column_id FOR XML PATH('')),1,2,'')
                from sys.index_columns ic
               where object_id=i.object_id and index_id=i.index_id) as columnlist
       from sys.indexes i inner join
    	    sys.index_columns ic on i.object_id=ic.object_id and
                                    i.index_id=ic.index_id inner join
            sys.objects o on i.object_id=o.object_id
      where o.is_ms_shipped=0) t1 inner join
   (select distinct object_name(i.object_id) tablename,i.name indexname,
             (select distinct stuff((select ', ' + c.name
                                       from sys.index_columns ic1 inner join
                                            sys.columns c on ic1.object_id=c.object_id and
                                                             ic1.column_id=c.column_id
                                      where ic1.index_id = ic.index_id and
                                            ic1.object_id=i.object_id and
                                            ic1.index_id=i.index_id
                                      order by index_column_id FOR XML PATH('')),1,2,'')
                from sys.index_columns ic
               where object_id=i.object_id and index_id=i.index_id) as columnlist
       from sys.indexes i inner join
    	    sys.index_columns ic on i.object_id=ic.object_id and
                                    i.index_id=ic.index_id inner join
            sys.objects o on i.object_id=o.object_id
 where o.is_ms_shipped=0) t2 on t1.tablename=t2.tablename and
       substring(t2.columnlist,1,len(t1.columnlist))=t1.columnlist and
       (t1.columnlist<>t2.columnlist or
         (t1.columnlist=t2.columnlist and t1.indexname<>t2.indexname))
Насколько полезной была статья?

Что еще посмотреть по SQL Server

Как запустить SQL сценарий сразу на нескольких БД

Запрос для получения SQL всех индексов для таблиц базы данных SQL Server

Как перестроить все индексы на базе SQL Server

Как разрезать строку на части в SQL по некоторому символу

Конвертация из строки в таблицу в SQL Server

Выполнение прямого запроса к URL из SQL

SQL Server Как установить у таблицы описание (MS Description)

Как получить текущего юзера БД

Как хранить в 1 поле таблицы БД значения разных типов?

Генерация MD5 в SQL Server

Как привести телефон в нормализованный вид

Как форматировать вывод числа с разделителями

Ищем партнеров-разработчиков на T-SQL и PL/pgSQL

Прямая работа с заказчиками как ИП или самозанятый. Нужно знать только SQL и HTML
Falcon Space - платформа для создания сайтов с личными кабинетами
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Запрос расчета стоимости веб-проекта на базе Falcon Space
Если видео Youtube плохо грузится, то попробуйте найти видео в ВК видео на канале Falcon Space
Сайт использует Cookie, Яндекс Метрику. Используя сайт, вы соглашаетесь с правилами сайта. См. Правила конфиденциальности и Правила использования сайта OK