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