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