Suche…


Clustered-Index erstellen

Bei einem gruppierten Index enthalten die Blattseiten die tatsächlichen Tabellenzeilen. Daher kann es nur einen Clusterindex geben.

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

Erstellen Sie einen nicht gruppierten Index

Nicht gruppierte Indizes haben eine von den Datenzeilen getrennte Struktur. Ein nicht gruppierter Index enthält die nicht gruppierten Indexschlüsselwerte, und jeder Schlüsselwerteintrag enthält einen Zeiger auf die Datenzeile, die den Schlüsselwert enthält. Es kann maximal 999 nicht gruppierten Index für SQL Server 2008/2012 geben.

Link als Referenz: 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

Indexinfo anzeigen

SP_HELPINDEX tableName

Index wird angezeigt

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) 

Index löschen

DROP INDEX IX_NonClustered ON Employees

Gibt Größen- und Fragmentierungsindizes zurück

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 neu anordnen und neu erstellen

avg_fragmentation_in_percent value Korrekturerklärung
> 5% und <= 30% REORGANISIEREN
> 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);

Erstellen Sie alle Indizes einer Tabelle neu oder ordnen Sie sie neu

Die Neuerstellung von Indizes erfolgt mit der folgenden Anweisung

ALTER INDEX All ON tableName REBUILD;

Dies löscht den Index und erstellt ihn neu, entfernt Fragementation, stellt Speicherplatz frei und ordnet Indexseiten neu an.

Man kann einen Index auch mit reorganisieren

ALTER INDEX All ON tableName REORGANIZE;

Dabei werden nur minimale Systemressourcen benötigt und die Blattebene gruppierter und nicht gruppierter Indizes für Tabellen und Ansichten defragmentiert, indem die Seiten der Blattebene physisch neu angeordnet werden, um der logischen Reihenfolge der Blattknoten von links nach rechts zu entsprechen

Erstellen Sie alle Indexdatenbank neu

EXEC sp_MSForEachTable 'ALTER INDEX ALL ON ? REBUILD'

Indexuntersuchungen

Sie können "SP_HELPINDEX Table_Name" verwenden, aber Kimberly Tripp verfügt über eine gespeicherte Prozedur (die Sie hier finden können ). Dies ist ein besseres Beispiel, da mehr Informationen zu den Indizes einschließlich Spalten und Filterdefinitionen angezeigt werden. Beispiel:
Verwendungszweck:

USE Adventureworks 
EXEC sp_SQLskills_SQL2012_helpindex 'dbo.Product'

Alternativ verfügt Tibor Karaszi über eine gespeicherte Prozedur ( hier zu finden ). In diesem werden auch Informationen zur Indexnutzung angezeigt und optional eine Liste mit Indexvorschlägen bereitgestellt. Verwendungszweck:

USE Adventureworks 
EXEC sp_indexinfo 'dbo.Product' 


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow