Поиск…


Создать кластеризованный индекс

С кластеризованным индексом страницы листа содержат фактические строки таблицы. Следовательно, может быть только один кластеризованный индекс.

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

Создать некластерный индекс

Некластеризованные индексы имеют структуру, отдельную от строк данных. Некластеризованный индекс содержит некластеризованные значения ключа ключа, и каждая запись ключа имеет указатель на строку данных, содержащую значение ключа. На SQL Server 2008/2012 может быть максимум 999 некластеризованных индексов.

Ссылка для справки: 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

Показать информацию об индексе

SP_HELPINDEX tableName

Индекс на вид

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 IX_NonClustered ON Employees

Возвращает индексы размера и фрагментации

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

Реорганизация и восстановление индекса

Значение avg_fragmentation_in_percent Корректирующее заявление
> 5% и <= 30% REORGANIZE
> 30% ВОССТАНОВЛЕНИЕ
ALTER INDEX IX_NonClustered ON tableName REORGANIZE;  


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

Перестроить или реорганизовать все индексы на таблицу

Восстановление индексов производится с использованием следующего оператора

ALTER INDEX All ON tableName REBUILD;

Это уменьшает индекс и воссоздает его, устраняет фрагментацию, восстанавливает дисковое пространство и индексирует страницы переупорядочения.

Можно также реорганизовать индекс, используя

ALTER INDEX All ON tableName REORGANIZE;

который будет использовать минимальные системные ресурсы и дефрагментирует листовой уровень кластеризованных и некластеризованных индексов на таблицах и представлениях, физически переупорядочивая страницы листового уровня, чтобы соответствовать логическому, слева направо, порядку листовых узлов

Перестроить всю базу данных индексов

EXEC sp_MSForEachTable 'ALTER INDEX ALL ON ? REBUILD'

Индексные исследования

Вы можете использовать «SP_HELPINDEX Table_Name», но у Kimberly Tripp есть хранимая процедура (которая может быть найдена здесь ), что является лучшим примером, поскольку он показывает больше об индексах, включая столбцы и определение фильтра, например:
Использование:

USE Adventureworks 
EXEC sp_SQLskills_SQL2012_helpindex 'dbo.Product'

В качестве альтернативы, Тибор Караси имеет хранимую процедуру (найденную здесь ). Более поздняя версия также покажет информацию об использовании индекса, а также предоставит список предложений по индексу. Использование:

USE Adventureworks 
EXEC sp_indexinfo 'dbo.Product' 


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow