Microsoft SQL Server
Index
Sök…
Skapa Clustered index
Med ett grupperat index innehåller bladsidorna de faktiska tabellraderna. Därför kan det bara finnas ett klusterindex.
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
Skapa icke-klusterindex
Icke-klusterade index har en struktur åtskild från dataraderna. Ett icke-klusterindex innehåller de icke-klusterade indexnyckelvärdena och varje nyckelvärdespost har en pekare till dataraden som innehåller nyckelvärdet. Det kan vara högst 999 icke-klusterindex på SQL Server 2008/2012.
Länk för referens: 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
Visa indexinfo
SP_HELPINDEX tableName
Index på vy
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)
Släpp index
DROP INDEX IX_NonClustered ON Employees
Returnerar storlek och fragmenteringsindex
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');
Omorganisera och bygga om index
avg_fragmentation_in_percent värde | Korrigerande uttalande |
---|---|
> 5% och <= 30% | OMORGANISERA |
> 30% | ÅTERUPPBYGGA |
ALTER INDEX IX_NonClustered ON tableName REORGANIZE;
ALTER INDEX ALL ON Production.Product
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
STATISTICS_NORECOMPUTE = ON);
Ombygga eller omorganisera alla index på ett bord
Ombyggnad av index görs med följande uttalande
ALTER INDEX All ON tableName REBUILD;
Detta tappar indexet och återskapar det, tar bort friktion, återställer hårddiskutrymme och omordnar indexsidor.
Man kan också omorganisera ett index med
ALTER INDEX All ON tableName REORGANIZE;
som kommer att använda minimala systemresurser och defragmentera bladnivån för klusterade och icke-slutna index på tabeller och vyer genom att fysiskt omordna bladnivåssidorna så att de matchar den logiska, vänster till höger, ordningen för bladnoderna
Ombygga all indexdatabas
EXEC sp_MSForEachTable 'ALTER INDEX ALL ON ? REBUILD'
Indexutredningar
Du kan använda "SP_HELPINDEX Table_Name", men Kimberly Tripp har en lagrad procedur (som kan hittas här ), vilket är bättre exempel, eftersom det visar mer om indexen, inklusive kolumner och filterdefinition, till exempel:
Användande:
USE Adventureworks
EXEC sp_SQLskills_SQL2012_helpindex 'dbo.Product'
Alternativt har Tibor Karaszi en lagrad procedur (hittas här ). Den senare kommer också att visa information om indexanvändning och eventuellt ge en lista med indexförslag. Användande:
USE Adventureworks
EXEC sp_indexinfo 'dbo.Product'