Microsoft SQL Server
Index
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'