2009-10-27 4 views

ответ

13

Для всех некластеризованных индексов в конкретной базе данных:

select object_name(object_id) as tablename, * 
from sys.indexes where type_desc = 'NONCLUSTERED' 

Это вернет систему и несистемные таблицы. Альтернативно:

select t.name as tablename, i.* 
from sys.indexes i, sys.tables t 
where i.object_id = t.object_id 
    and i.type_desc = 'NONCLUSTERED' 

только для некластеризованных индексов.

1

Вы можете получить все индексы для таблицы с помощью

exec sp_helpindex 'tablename'

Вы можете вставить это в таблицу, и удалить все строки, где INDEX_DESCRIPTION начинается с «CLUSTERED»

Вот скрипт для всех индексов в базе данных

declare @EmptyString varchar(1) 
select @EmptyString = '' 

-- 35 is the lenght of the name field of the master.dbo.spt_values table 
declare @IgnoreDuplicateKeys varchar(35), 
    @Unique varchar(35), 
    @IgnoreDuplicateRows varchar(35), 
    @Clustered varchar(35), 
    @Hypotethical varchar(35), 
    @Statistics varchar(35), 
    @PrimaryKey varchar(35), 
    @UniqueKey varchar(35), 
    @AutoCreate varchar(35), 
    @StatsNoRecompute varchar(35) 

select @IgnoreDuplicateKeys = name from master.dbo.spt_values 
    where type = 'I' and number = 1 --ignore duplicate keys 
select @Unique = name from master.dbo.spt_values 
    where type = 'I' and number = 2 --unique 
select @IgnoreDuplicateRows = name from master.dbo.spt_values 
    where type = 'I' and number = 4 --ignore duplicate rows 
select @Clustered = name from master.dbo.spt_values 
    where type = 'I' and number = 16 --clustered 
select @Hypotethical = name from master.dbo.spt_values 
    where type = 'I' and number = 32 --hypotethical 
select @Statistics = name from master.dbo.spt_values 
    where type = 'I' and number = 64 --statistics 
select @PrimaryKey = name from master.dbo.spt_values 
    where type = 'I' and number = 2048 --primary key 
select @UniqueKey = name from master.dbo.spt_values 
    where type = 'I' and number = 4096 --unique key 
select @AutoCreate = name from master.dbo.spt_values 
    where type = 'I' and number = 8388608 --auto create 
select @StatsNoRecompute = name from master.dbo.spt_values 
    where type = 'I' and number = 16777216 --stats no recompute 
select o.name, 
    i.name, 
    'index description' = convert(varchar(210), --bits 16 off, 1, 2, 16777216 on 
     case when (i.status & 16)<>0 then @Clustered else 'non'[email protected] end 
     + case when (i.status & 1)<>0 then ', '[email protected] else @EmptyString end 
     + case when (i.status & 2)<>0 then ', '[email protected] else @EmptyString end 
     + case when (i.status & 4)<>0 then ', '[email protected] else @EmptyString end 
     + case when (i.status & 64)<>0 then ', '[email protected] else 
     case when (i.status & 32)<>0 then ', '[email protected] else @EmptyString end end 
     + case when (i.status & 2048)<>0 then ', '[email protected] else @EmptyString end 
     + case when (i.status & 4096)<>0 then ', '[email protected] else @EmptyString end 
     + case when (i.status & 8388608)<>0 then ', '[email protected] else @EmptyString end 
     + case when (i.status & 16777216)<>0 then ', '[email protected] else @EmptyString end), 
    'index column 1' = index_col(o.name,indid, 1), 
    'index column 2' = index_col(o.name,indid, 2), 
    'index column 3' = index_col(o.name,indid, 3) 
from sysindexes i, sysobjects o 
where i.id = o.id and 
     indid > 0 and indid < 255 --all the clustered (=1), non clusterd (>1 and <251), and text or image (=255) 
     and o.type = 'U' --user table 
     --ignore the indexes for the autostat 
     and (i.status & 64) = 0 --index with duplicates 
     and (i.status & 8388608) = 0 --auto created index 
     and (i.status & 16777216)= 0 --stats no recompute 
     order by o.name 

сценарий Джузеппе DiMauro на http://www.devx.com/vb2themax/Tip/18617

+0

Это не заслуживало понижения. –

+0

оригинальный ответ сделал – super9

Смежные вопросы