Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

T-SQL untuk menemukan Indeks yang Berlebihan

Ada situasi di mana redundansi tidak berlaku. Misalnya, ucapkan ColumnC adalah bidang yang sangat besar, tetapi terkadang Anda harus mengambilnya dengan cepat. index 1 . Anda tidak memerlukan pencarian kunci untuk:

select ColumnC from YourTable where ColumnnA = 12

Sebaliknya index 2 jauh lebih kecil, sehingga dapat dibaca di memori untuk kueri yang memerlukan pemindaian indeks:

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

Jadi mereka tidak terlalu berlebihan.

Jika Anda tidak yakin dengan argumen saya di atas, Anda dapat menemukan indeks "berlebihan" seperti:

;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

Bawa kue untuk pengguna Anda jika kinerja menurun "secara tidak terduga" :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membuat Unique Constraint pada Kolom untuk Tabel yang sudah ada - Tutorial SQL Server / TSQL Part 97

  2. Dapatkan hari dalam seminggu di SQL Server 2005/2008

  3. Kerangka Entitas 6 - Kueri pengaturan waktu

  4. Perbandingan Teknis:Microsoft Access 2016 vs SQL Server 2016

  5. SQL:huruf besar hanya huruf pertama