Zoeken…


Maak een geclusterde index

Met een geclusterde index bevatten de bladpagina's de werkelijke tabelrijen. Daarom kan er slechts één geclusterde index zijn.

CREATE TABLE Employees
(
    ID CHAR(900),
    FirstName NVARCHAR(3000),
    LastName NVARCHAR(3000),
    StartYear CHAR(900)
)
GO

CREATE CLUSTERED INDEX IX_Clustered 
ON Employees(ID)
GO

Maak een niet-geclusterde index

Niet-geclusterde indexen hebben een afzonderlijke structuur van de gegevensrijen. Een niet-geclusterde index bevat de niet-geclusterde indexsleutelwaarden en elk sleutelwaarde-item heeft een wijzer naar de gegevensrij die de sleutelwaarde bevat. Er kan maximaal 999 niet-geclusterde index op SQL Server 2008/2012 zijn.

Link voor referentie: https://msdn.microsoft.com/en-us/library/ms143432.aspx

CREATE TABLE Employees
(
    ID CHAR(900),
    FirstName NVARCHAR(3000),
    LastName NVARCHAR(3000),
    StartYear CHAR(900)
)
GO

CREATE NONCLUSTERED INDEX IX_NonClustered
ON Employees(StartYear)
GO

Index-informatie weergeven

SP_HELPINDEX tableName

Index te bekijken

CREATE VIEW  View_Index02
WITH SCHEMABINDING
AS 
SELECT c.CompanyName, o.OrderDate, o.OrderID, od.ProductID 
     FROM dbo.Customers C 
        INNER JOIN dbo.orders O ON c.CustomerID=o.CustomerID  
            INNER JOIN dbo.[Order Details] od ON o.OrderID=od.OrderID   
GO

CREATE UNIQUE CLUSTERED INDEX IX1 ON 
    View_Index02(OrderID, ProductID) 

Drop index

DROP INDEX IX_NonClustered ON Employees

Retourneert grootte- en fragmentatie-indexen

sys.dm_db_index_physical_stats (   
    { database_id | NULL | 0 | DEFAULT }  
  , { object_id | NULL | 0 | DEFAULT }  
  , { index_id | NULL | 0 | -1 | DEFAULT }  
  , { partition_number | NULL | 0 | DEFAULT }  
  , { mode | NULL | DEFAULT }  
)  


Sample :

SELECT * FROM sys.dm_db_index_physical_stats  
    (DB_ID(N'DBName'), OBJECT_ID(N'IX_NonClustered '), NULL, NULL , 'DETAILED');  

Index opnieuw indelen en opnieuw opbouwen

avg_fragmentation_in_percent waarde Corrigerende verklaring
> 5% en <= 30% REORGANISEREN
> 30% REBUILD
ALTER INDEX IX_NonClustered ON tableName REORGANIZE;  


ALTER INDEX ALL ON Production.Product
 REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
          STATISTICS_NORECOMPUTE = ON);

Herbouw of reorganiseer alle indexen op een tafel

Het opnieuw opbouwen van indexen gebeurt met behulp van de volgende instructie

ALTER INDEX All ON tableName REBUILD;

Hierdoor wordt de index verwijderd en opnieuw gemaakt, waardoor fragmentatie wordt verwijderd, schijfruimte wordt teruggewonnen en indexpagina's opnieuw worden besteld.

Men kan ook een index reorganiseren met behulp van

ALTER INDEX All ON tableName REORGANIZE;

die minimale systeembronnen gebruikt en het bladniveau van geclusterde en niet-geclusterde indexen op tabellen en weergaven defragmenteert door de bladniveau-pagina's fysiek opnieuw te ordenen zodat ze overeenkomen met de logische, van links naar rechts, volgorde van de bladknooppunten

Bouw alle indexdatabases opnieuw op

EXEC sp_MSForEachTable 'ALTER INDEX ALL ON ? REBUILD'

Indexonderzoeken

Je zou "SP_HELPINDEX Table_Name" kunnen gebruiken, maar Kimberly Tripp heeft een opgeslagen procedure (die hier te vinden is ), wat een beter voorbeeld is, omdat het meer te weten komt over de indexen, inclusief kolommen en filterdefinitie, bijvoorbeeld:
Gebruik:

USE Adventureworks 
EXEC sp_SQLskills_SQL2012_helpindex 'dbo.Product'

Als alternatief heeft Tibor Karaszi een opgeslagen procedure ( hier te vinden ). De laatste toont ook informatie over indexgebruik en biedt optioneel een lijst met indexsuggesties. Gebruik:

USE Adventureworks 
EXEC sp_indexinfo 'dbo.Product' 


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow