Программирование баз данных MS SQL Server (1084479), страница 85
Текст из файла (страница 85)
Каждый экстент состоит из восьми страниц. Страница — это последний уровень иерархии структур памяти, достигаемый перед переходом к строке с фактическими данными. Безусловно, количество страниц в расчете на один экстент является постоянным, но количество строк в расчете на одну страницу изменяется, поскольку полностью зависит от размера строки, который может изменяться.
Страницу можно рассматривать как своего рода контейнер для данных строк таблицы и индекса. Но разбивка строк, в результате которой ее данные переходили бы с одной страницы на другую, не допускается. Страницы подразделяются на несколько типов. В настоящей книге рассматриваются только типы страниц, описанные ниже. П Страницы данных в основном не требуют пояснений. Фактически страницы данных обеспечивают хранение данных, относящихся к таблице. К данным, размещаемым на страницах, не относятся только данные типа ВБОВ, которые не определены с помощью опции "Гехс йп гон" (текст, заданный в строке) или параметра чагсйаг (мах) .
0 Страницы индекса также в основном не требуют пояснений. Они применяются для хранения страниц листового и нелистового уровней некластеризованного индекса, а также страниц нелистового уровня кластеризованного индекса (информация по этой теме будет приведена ниже в данной главе). Особенности индексов этих типов будут становиться все более понятными по мере дальнейшего изучения материала, приведенного в настоящей главе. 336 Г ай Разбиение одной страницы на дае После заполнения страницы происходит ее разбиение на две страницы. Операция разбиения страницы не сводится только к тому, что распределяется новая страница; в результате разбиения примерно половина данных переписывается с существующей страницы на новую.
Но если применяется кластеризованный индекс, процесс разбиения страниц происходит иначе. Если на таблице задан кластеризованный индекс и возникает такая ситуация, что очередная вставляемая строка должна быть физически расположена в качестве последней строки в таблице, то распределяется еще одна страница и новая строка записывается на эту страницу, причем перемещение каких-либо существующих данных не происходит.
Дополнительные сведения о разбиении страниц будут приведены при описании индексов. Строки Специалисты, разрабатывающие программное обеспечение для баз данных, часто сталкиваются с таким понятием, как блокировка уровня строк, поэтому знают, что строка представлена в базе данных как отдельный объект. Строки могут иметь размеры до 8 Кбайт. Более точно указанный выше предел определяется как равный 8060 байтам; кроме того, максимальное количество столбцов составляет 1024.
Но на практике чаще приходится сталкиваться с такой ситуацией, что достигается предел длины строки, составляющей 8060 байтов, чем предельное количество столбцов. При количестве столбцов, равном 1024, средняя ширина столбца составляет 8 байтов. Но нелегко найти пример приложения, в котором это значение размера, применяемое для представления данных, было бы достаточным.
Обычно исключением из этого правила являются результаты измерений и статистическая информация, поскольку такие приложения требуют, чтобы в базе данных можно было представить большое количество различных показателей для хранения применяемых числовых значений. Но даже в таких приложениях предел количества столбцов, равный 1024 столбцам, достигается очень редко. Общие сведения об индексах В толковом словаре Вебстера индекс определяется следующим образом.
Индекс — это список ~такой как бибгиогфафичесхая инфсфмация или нфечень цитат, вэя. тых иэ лиям)капу)эы), кото)гый обычно Располагается в аафаеит ком по)тдке пеРечисеения опфедегенных даннь х (таких как автои, темы или ключевые слова). Автор обычно использует более простое толкование понятия индекса, в котором применяются термины, относящиеся к базе данных, и определяет индекс как средство, позволяющее ускорить доступ к данным. Тем не менее трактовка понятия индекса, приведенная в словаре Вебстера, не так уж плоха, даже с точки зрения ее применимости в данном контексте.
По-видимому, наибольшего внимания в определении, имеющемся в словаре Вебстера, заслуживает то, что в нем есть слово "обычно". А трактовка понятия "алфавитный порядок" изменяется в зависимости от того, какие конкретные правила применяются для определения самого алфавитного порядка. Например, в СУБД 8О1. Структуры памяти и индексные структуры ЯЯ1. Бегчег 337 Таблица 9.1. Правила определения равенства символов прн использовании различных опций упорядочения Последовательность хранения в индексе Схема упорядочения Сравниваемые значения й=а-а=а=а=й=а=А=а а, й, а, а, а, й, а, А,а Лексикографический порядок, без учета регистра, без учета диакритического знака (значение, применяемое по умолчанию) й=а=а=а=а=й=а=А=а й, а,а, а,а, й, а, А, а Лексикографический порядок, без учета диакритического знака, первоочередное расположение символов верхнего регистра й а, й а, й а, айваза, ййА й, а, а, а, а, й, а, А, й Лексикографический порядок, с учетом регистра 8егтег предусмотрена возможность использовать целый ряд различных опций упорядочения данных.
Некоторые из этих опций описаны ниже. бу Порядок, учитывающий двоичные значения. При использовании такого подхода сортировка данных происходит с учетом внутреннего представления символа (например, в кодировке АВС11 пробел представлен числом 82, буква "0" — числом 68, буква "с~" — числом 100). А поскольку компьютеры в наибольшей степени приспособлены для обработки числовых данных, то эта опция обеспечивает также наибольшее быстродействие. Но, к сожалению, формат внутреннего представления не всегда соответствует приемлемой последовательности сортировки данных; кроме того, применение такой опции при проведении операций сравнения в конструкции ХНЕЛЕ действительно может привести к путанице.
П Порядок, в котором учитывается лексикографическое определение. При использовании этой опции сортировка данных происходит по такому же принципу, как и в словаре, но с учетом некоторых дополнительных возможностей. В частности, предусмотрена возможность задавать различные дополнительные опции, позволяющие определить, учитываются ли регистр, диакритический знак и набор символов. Вполне очевидно, что после передачи СУБД 8Я1.
Зегуег указания, что должен учитываться регистр, буква ' й" будет рассматриваться как отличная от "а". Аналогичным образом, если указано, что регистр не учитывается, то буква ' й" рассматривается как равная букве "а". Задача определения правильного порядка сортировки немного усложняется после ввода в действие средств учета диакритических знаков, иными словами, после указания на то, что в СУБД 801. 8егтег должны учитываться диакритические знаки и поэтому буква "а*' рассматривается как отличная от "а", которая отличается от "а".
Для многих пользователей еще более значительным источником путаницы является то, что от принятого способа упорядочения зависит не только трактовка понятия равенства символов данных, но и применяемый порядок сортировки (и, тем самым, принятый способ хранения данных в индексах). В качестве примера рассмотрим, какие правила определяют равенство символов при использовании нескольких различных опций упорядочения, приведенных в табл. 9.1.
Кроме того, в этой таблице приведена информация о порядке сортировки и о том, какие условия равенства применяются при выполнении операций сравнения данных. 338 Глава 9 Итак, в соответствии с приведенными выше сведениями необходимо учитывать то, как влияет на использование индексов та информация об упорядочении, которая определена для данных, представленных в базе данных.
Опции упорядочения могут быть определены на уровне базы данных и на уровне столбца, поэтому разработчик имеет в своем распоряжении довольно мощные возможности по определению степени детализации управления опциями упорядочения. Но если будет решено задать опцию, предусматривающую отсутствие чувствительности к регистру на уровне сервера, то об этом следует обязательно упомянуть в документации на разрабатываемую систему.
Если это требование не будет учтено, то необходимо будет подготовиться к приему бесчисленных звонков в службу технической поддержки, особенно если продажа программного продукта осуществляется за пределами того государства, в котором оно разработано. Чтобы понять важность этого требования, достаточно представить себе, что какой-либо независимый поставщик программного обеспечения (1пдерепс(епг Бойиаге гепбог — 1ог') выполнил поставку вашего программного продукта заказчику, который установил этот продукт на существующем сервере (а это вполне разумное решение, поскольку вряд ли кто-либо станет покупать отдельный компьютер для каждой программы), но на этом действующем сервере применяются опции, предусматривающие учет регистра. В таком случае вам придется приготовиться к тому, что будут поступать жалобы от очень недовольных заказчиков.
В-деревья Очевидно, что подход к созданию индексов, основанный на использовании сбалансированного дерева (Ва!апсес( Тгее — В-Тгее), впервые был применен задолго до создания программного обеспечения Я~Е Яеггег. А в настоящее время сбалансированные деревья (или сокращенно В-деревья) используются в очень многих системах индексации, относящихся и не относящихся к миру баз данных. Вообще говоря, В-дерево — это структура данных, позволяющая использовать единообразные и относительно недорогие методы поиска способов выборки конкретных фрагментов информации. Само то, что в названии этой структуры данных применяется слово "сбалансированный" (Ва!апсеб — В), говорит о многом. Дело в том, что такая структура данных, как В-дерево, обеспечивает автоматическую поддержку сбалансированности узлов. Это означает, что от каждого узла всегда исходит примерно одинаковое количество ветвей; иными словами, примерно половина данных находится по одну сторону от узла и примерно половина — по другую сторону.
Кроме того, визуальное представление такой сбалансированной структуры данных также весьма напоминает дерево (состоящее из ветвей и узлов). И действительно, после того, как структура данных В-дерева, изображенная в том виде, в каком ее принято вычерчивать (с ветвями, направленными вниз), будет перевернута, она принимает общую форму дерева. Формирование В-дерева начинается с образования корневого узла (в этом заклю- чается еще одна аналогия с деревом, растущим из одного корня, но далеко не послед- Структуры памяти и индексные структуры ЯЯЕ Ьегчег 339 няя).