MSSQL NonClustured Indexleri Listeleme

SELECT DB_NAME() AS Database_Name, sc.name AS Schema_Name, o.name AS Table_Name, i.name AS Index_Name, i.type_desc AS Index_Type FROM sys.indexes i
INNER JOIN sys.objects o ON i.object_id = o.object_id
INNER JOIN sys.schemas sc ON o.schema_id = sc.schema_id
WHERE i.name IS NOT NULL And i.type_desc =’NONCLUSTERED’ AND o.type = ‘U’ — o.type=’U’ Only get indexes for User Created Tables
ORDER BY o.name, i.type

MSSQL Index

Indeksleme aslında iki türlüdür. Birisi clustered index diğeri non-clustered indekstir. Clustered index aslında hepimizin bildiği bir tablo içinde birbirinin aynı olmayan verileri sağlamak üzere kullanmış olduğumuz genellikle tabloda ilgili alan için (ilgili tabloya özel) durum için belli bir ID etiketi ile tanımladığımız fiziksel indekslemedir(LogID gibi). Non-Clustered ise daha farklı bir yapıdır. Buradaki amaç verilerin fiziksel olarak sıralaması değil, verilerin tutulduğu yerlerin adreslerini işeretçi niteliğinde tutmaktır.

–Aşağıdaki işlemle Kaç logical read yaptığımı gösteren sistemi açtım.
SET STATISTICS IO ON
— Aşağıdaki  işlemle Kaç Kaç milisaniye geçtiğini gösteren sistemi açtım.
SET STATISTICS TIME ON
--TABLO OLUŞTUR
CREATE TABLE [dbo].[DENEME](
	[Ad] [nvarchar](50) NULL,
	[Soyad] [nvarchar](150) NULL,
	[Baslangic] [datetime] NULL,
	[bitis] [datetime] NULL
) ON [PRIMARY]

--TABLO DOLDUR
DECLARE @i INT
SET @i=0
WHILE(@i<500000)
BEGIN
INSERT INTO DENEME
SELECT Ad='TEST'+CAST(@i AS nvarchar(50)),SoyAd='AALİSD'+CAST(@i AS NVARCHAR(150)),baslangic =dateadd(hour,@i,getdate()), bitis = dateadd(hour,@i+1,getdate())
SET @i=@i+1
END

--Index Yaratma
CREATE CLUSTERED INDEX AdIndex ON DENEME(Ad)
CREATE NONCLUSTERED INDEX AdIndex ON dbo.DENEME(Ad)