sql >> Databáze >  >> RDS >> Sqlserver

T-SQL pro hledání redundantních indexů

Jsou situace, kdy redundance neplatí. Řekněte například ColumnC bylo obrovské pole, ale někdy byste ho museli rychle získat. Váš index 1 by nevyžadovalo vyhledávání klíče pro:

select ColumnC from YourTable where ColumnnA = 12

Na druhou stranu index 2 je mnohem menší, takže jej lze číst v paměti pro dotazy, které vyžadují skenování indexu:

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

Takže opravdu nejsou nadbytečné.

Pokud vás můj výše uvedený argument nepřesvědčí, můžete najít „nadbytečné“ indexy jako:

;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

Přineste svým uživatelům dort pro případ, že by se výkon "nečekaně" snížil :-)



  1. Jaký je správný index pro dotazování struktur v polích v Postgres jsonb?

  2. CHYBA:HHH000299:Nelze dokončit aktualizaci schématu java.lang.NullPointerException

  3. Vypočítejte vzdálenost zadanou 2 body, zeměpisnou šířku a délku

  4. Široké pole varchar způsobuje chybu Požadovaná konverze není podporována pomocí openquery s propojeným serverem MySQL