Введение в программирование SQL Server. Создание и управление базой данных. Инструменты целостности данных, страница 25

Как SQL Server хранит и получает доступ к данным

Понимание того, как хранятся данные – является основой понимание того, как получить к ним доступ.

Куча – это коллекция страниц данных, содержащих строки для таблицы:

*  Каждая страница данных содержит 8 килобайт информации. Группа и 8-и рядом стоящих страниц называется пространством.

*  Строки данных не хранятся в каком-либо определённом порядке, и нет определённого порядка для последовательности страниц.

*  Страницы данных не связаны в связанные списки.

*  Когда строка вставляется в страницу и страница переполнена, страница разделяется.

Сервер SQL получает доступ к данным одним из следующих способов:

*  Сканирует все страницы таблицы – сканирование таблицы. Когда SQL Server выполняет сканирование таблицы он:

o  Начинает с начала таблицы;

o  Сканирует от страницы к странице через все строки таблицы;

o  Выделяет строку, которая соответствует запросу.

*  Используя индексы. Когда SQL Server использует индексы, он:

o  Пересекает структуру дерева индексов для поиска строк, соответствующих запросу;

o  Выделяет только необходимые строки, соответствующие критериям запроса.

Первым делом, SQL Server определяет, какие индексы существуют. Оптимизатор запроса (компонент, предназначенный для генерирования оптимального плана для запроса) определяет что использовать – сканировать таблицу или индексы. Индексы более предпочтительны.

Нужно ли создавать индексы?

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

Индексы ускоряют доступ к данным. Для примера, без индекса, без индексы вам понадобится перелистать постранично всю книгу для определения содержания. По содержанию легче найти интересующую информацию.

Сервер SQL использует индексы для указания на расположение строки в странице данных вместо просматривания всех страниц таблицы. Рассматривайте следующие факты и рекомендации об индексах:

*  Индексы обычно увеличивают скорость выполнения запросов связанных таблиц и выполнение сортировки и группировки;

*  Индексы принуждают делать строки уникальными, если включена уникальность.

*  Индексы создаются в порядке возрастания или уменьшения.

Индексы достаточно полезны, но они занимают место на диске и берут на себя дополнительные накладные расходы и расходы на эксплуатацию. Рассматривайте следующие факты и рекомендации об индексах:

*  Когда вы изменяете данные в индексной колонке, сервер SQL обновляет связанные индексы.

*  Накладные расходы на поддержку индексов требуют времени и ресурсов. Поэтому не создавайте индексы, которые не будете часто использовать.

*  Индексы на колонки, содержащие большое количество доблирующих данных могут иметь несколько преимуществ.

6.2 Архитектура индексов

Архитектура индексов для кластерных и не кластерных индексов различна. Понимание разницы в архитектурах поможет вам создать наиболее эффективный тип индекса.

Использование кучи

Сервер SQL содержит данные в страницах данных в куче, если не объявлен кластерный индекс в таблице. SQL Server:

*  Использует страницы карты расположения индексов (Index Allocation Map IAM). Страницы IAM:

o  Содержат информацию, где находится пространство кучи;

o  Используется для навигации через кучу и находит доступное пространство для вставки новых строк;

o  Соединяется со страницами данных;

*  Возвращает пространство для новых строк в кучу, когда строка удаляется.

Использование кластерных индексов

Кластерные индексы часто используются для колонок, которые часто используются для поиска, для ряда ключевых значений, или для доступа к отсортированному списку. Когда вы создаёте кластерный индекс, рассматривайте следующие замечания и рекомендации:

*  Каждая таблица может иметь только один кластерный индекс;