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' 


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow