Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

T-SQL за намиране на излишни индекси

Има ситуации, в които съкращаването не е валидно. Например, кажете ColumnC беше огромно поле, но понякога трябваше да го извличаш бързо. Вашият index 1 не изисква ключово търсене за:

select ColumnC from YourTable where ColumnnA = 12

От друга страна index 2 е много по-малък, така че може да се чете в паметта за заявки, които изискват индексно сканиране:

select * from YourTable where ColumnnA like '%hello%'

Така че те всъщност не са излишни.

Ако не сте убедени от горния ми аргумент, можете да намерите "излишни" индекси като:

;with ind as (
    select  a.object_id
    ,       a.index_id
    ,       cast(col_list.list as varchar(max)) as list
    from    (
            select  distinct object_id
            ,       index_id
            from    sys.index_columns
            ) a
    cross apply
            (
            select  cast(column_id as varchar(16)) + ',' as [text()]
            from    sys.index_columns b
            where   a.object_id = b.object_id
                    and a.index_id = b.index_id
            for xml path(''), type
            ) col_list (list)
)
select  object_name(a.object_id) as TableName
,       asi.name as FatherIndex
,       bsi.name as RedundantIndex
from    ind a
join    sys.sysindexes asi
on      asi.id = a.object_id
        and asi.indid = a.index_id
join    ind b
on      a.object_id = b.object_id
        and a.object_id = b.object_id
        and len(a.list) > len(b.list)
        and left(a.list, LEN(b.list)) = b.list
join    sys.sysindexes bsi
on      bsi.id = b.object_id
        and bsi.indid = b.index_id

Донесете торта за потребителите си в случай, че производителността спадне "неочаквано" :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализирайте, ако името съществува, else insert - в SQL Server

  2. Групово вмъкване на SQL Server – част 1

  3. Как да активирате XPs на агент на SQL Server с помощта на T-SQL

  4. Как да актуализирате и поръчате с помощта на ms sql

  5. Как да заредя XML файл в база данни с помощта на SSIS пакет?