Microsoft SQL Server
Индекс
Поиск…
Создать кластеризованный индекс
С кластеризованным индексом страницы листа содержат фактические строки таблицы. Следовательно, может быть только один кластеризованный индекс.
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'