индексы

 
 

информация

Индекс — это объект базы данных, имеющий структуру, оптимизированную для поиска.

Основной единицей хранения информации в SQL сервере является страница.

Основной единицей распределения памяти в базе данных является экстент, равный 64Кб.

Таблица, которая не имеет кластеризованного индекса, называется кучей.

Что бы определить, является ли таблица кучей, нужно выполнить запрос.
Если поле index_id равно 0 и поле type_desc равно HEAP, то эта таблица является кучей.
Синтаксис
SELECT * 
FROM sys.indexes
WHERE object_id = (SELECT object_id 
                   FROM sys.tables
                   WHERE name = 'имя_таблицы')
 
Скрыть

Показать

Копировать
  Script.sql  
--выбор базы
USE zzz
GO
SELECT * 
FROM sys.indexes
WHERE object_id = (SELECT object_id 
                   FROM sys.tables
                   WHERE name = 'Book')
 
Таблица не является кучей.
 
 

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

При кластеризованном индексе данные в таблице хранятся в отсортированном виде по указанному полю. Если поле имеет первичный ключ (PRIMARY KEY), то кластеризованный индекс уже создан по умолчанию.

При создании кластеризованного индекса, нужно поле сделать уникальным (UNIQUE).
Синтаксис
--создание кластеризованного индекса
CREATE UNIQUE CLUSTERED INDEX имя_индекса
ON имя_таблицы(имя_столбца)
GO
 
--отключение индекса
ALTER INDEX имя_индекса ON имя_таблицы DISABLE
GO
 
--включение индекса
ALTER INDEX имя_индекса ON имя_таблицы REBUILD
GO
 
--удаление индекса
DROP INDEX имя_индекса ON имя_таблицы
GO
 
Скрыть

Показать

Копировать
  Script.sql  
--выбор базы
USE zzz
GO
--создание не кластеризованной таблицы, без PRIMARY KEY
CREATE TABLE One(
 Number INT NOT NULL
)
--вставляем данные
INSERT INTO One(Number) VALUES
(3),
(5),
(2),
(4),
(1)
--вывод данных будет не отсортирован
SELECT * FROM One
--удаляем данные
DELETE FROM One
--создание кластеризованного индекса
CREATE UNIQUE CLUSTERED INDEX myIndex
ON One(Number)
GO
--вставляем данные
INSERT INTO One(Number) VALUES
(3),
(5),
(2),
(4),
(1)
--вывод данных будет отсортирован
SELECT * FROM One
 
 
 

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

При некастеризованном индексе данные в таблице хранятся не в отсортированном виде, а индексы, указывающие на эти строки, хранятся в отсортированном виде. Таких индексов может быть несколько.

При создании не кластеризованного индекса, нужно поле сделать уникальным (UNIQUE).
Синтаксис
--создание не кластеризованного индекса
CREATE UNIQUE NONCLUSTERED INDEX имя_индекса
ON имя_таблицы(имя_столбца)
GO
 
--отключение индекса
ALTER INDEX имя_индекса ON имя_таблицы DISABLE
GO
 
--включение индекса
ALTER INDEX имя_индекса ON имя_таблицы REBUILD
GO
 
--удаление индекса
DROP INDEX имя_индекса ON имя_таблицы
GO
 
Скрыть

Показать

Копировать
  Script.sql  
--выбор базы
USE zzz
GO
--создание не кластеризованной таблицы, без PRIMARY KEY
CREATE TABLE One(
 Number INT NOT NULL
)
--вставляем данные
INSERT INTO One(Number) VALUES
(3),
(5),
(2),
(4),
(1)
--вывод данных будет не отсортирован
SELECT * FROM One
--удаляем данные
DELETE FROM One
--создание не кластеризованного индекса
CREATE UNIQUE NONCLUSTERED INDEX myIndex
ON One(Number)
GO
--вставляем данные
INSERT INTO One(Number) VALUES
(3),
(5),
(2),
(4),
(1)
--вывод данных будет отсортирован
SELECT * FROM One