Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

T-SQL do wyszukiwania nadmiarowych indeksów

Są sytuacje, w których redundancja nie obowiązuje. Na przykład powiedz ColumnC było ogromnym polem, ale czasami trzeba było je szybko odzyskać. Twój index 1 nie wymagałby wyszukiwania kluczy dla:

select ColumnC from YourTable where ColumnnA = 12

Z drugiej strony index 2 jest znacznie mniejszy, więc można go odczytać w pamięci dla zapytań wymagających skanowania indeksu:

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

Więc nie są zbyteczne.

Jeśli nie przekonuje Cię moja powyższa argumentacja, możesz znaleźć „zbędne” indeksy, takie jak:

;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

Przynieś ciasto swoim użytkownikom na wypadek, gdyby wydajność spadła „nieoczekiwanie” :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zmienić sortowanie na poziomie serwera uruchomionej instancji SQL Server?

  2. Jak przekonwertować ciąg na datę/godzinę w SQL Server za pomocą PARSE()

  3. Jak utworzyć klucz podstawowy w SQL Server (przykłady T-SQL)

  4. Wewnętrzne siedem sortowań SQL Server – część 1

  5. Jak zmodyfikować okres przechowywania zmian przechwytywania danych (CDC) w programie SQL Server — samouczek dotyczący programu SQL Server