Szukaj…


Utwórz indeks klastrowany

W indeksie klastrowym strony liści zawierają rzeczywiste wiersze tabeli. Dlatego może istnieć tylko jeden indeks klastrowany.

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

Utwórz indeks nieklastrowany

Indeksy nieklastrowane mają strukturę oddzielną od wierszy danych. Indeks nieklastrowany zawiera wartości klucza indeksu nieklastrowego, a każda pozycja wartości klucza ma wskaźnik do wiersza danych zawierającego wartość klucza. W programie SQL Server 2008/2012 może istnieć maksymalnie 999 indeks nieklastrowany.

Link w celach informacyjnych: 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

Pokaż informacje o indeksie

SP_HELPINDEX tableName

Indeks w widoku

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) 

Upuść indeks

DROP INDEX IX_NonClustered ON Employees

Zwraca indeks wielkości i fragmentacji

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');  

Zreorganizuj i odbuduj indeks

średnia wartość fragmentacji w procentu Oświadczenie korygujące
> 5% i <= 30% ZREORGANIZOWAĆ
> 30% ODBUDOWAĆ
ALTER INDEX IX_NonClustered ON tableName REORGANIZE;  


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

Odbuduj lub zreorganizuj wszystkie indeksy w tabeli

Odbudowywanie indeksów odbywa się za pomocą następującej instrukcji

ALTER INDEX All ON tableName REBUILD;

Spowoduje to upuszczenie indeksu i odtworzenie go, usunięcie frustracji, odzyskanie miejsca na dysku i zmianę kolejności stron indeksu.

Można również zreorganizować indeks za pomocą

ALTER INDEX All ON tableName REORGANIZE;

który będzie używał minimalnych zasobów systemowych i defragmentował poziom liścia indeksów klastrowanych i nieklastrowanych w tabelach i widokach, fizycznie zmieniając kolejność stron na poziomie liścia, aby dopasować logiczną kolejność węzłów liści od lewej do prawej

Odbuduj całą bazę danych indeksu

EXEC sp_MSForEachTable 'ALTER INDEX ALL ON ? REBUILD'

Badania indeksu

Można użyć „SP_HELPINDEX nazwa_tabeli”, ale Kimberly Tripp ma procedurę składowaną (którą można znaleźć tutaj ), co jest lepszym przykładem, ponieważ pokazuje więcej na temat indeksów, w tym definicji kolumn i filtrów, na przykład:
Stosowanie:

USE Adventureworks 
EXEC sp_SQLskills_SQL2012_helpindex 'dbo.Product'

Alternatywnie, Tibor Karaszi ma procedurę składowaną ( tutaj ). Później pokaże również informacje o użyciu indeksu i opcjonalnie dostarczy listę sugestii indeksu. Stosowanie:

USE Adventureworks 
EXEC sp_indexinfo 'dbo.Product' 


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow