|
Программирование >> Программирование баз данных
проведении операций сравнения в конструкции WHERE действительно может привести к путанице. Порядок, в котором учитывается лексикографическое определение. При использовании этой опции сортировка данных происходит по такому же принципу, как и в словаре, но с учетом некоторых дополнительных возможностей. В частности, предусмотрена возможность задавать различные дополнительные опции, позволяющие определить, учитываются ли регистр, диакритические знаки и набор символов. Вполне очевидно, что после передачи СУБД SQL Server указания, что должен учитываться регистр, буква А будет рассматриваться как отличная от а . Аналогичным образом, если указано, что регистр не учитывается, то буква А рассматривается как равная букве а . Задача определения правильного порядка сортировки немного усложняется после ввода в действие средств учета диакритических знаков, иными словами, после указания на то, что в СУБД SQL Server должны учитываться диакритические знаки и поэтому буква а рассматривается как отличная от а , которая отличается от а . Для многих пользователей еще более значительным источником путаницы является то, что от принятого способа упорядочения зависит не только трактовка понятия равенства символов данных, но и применяемый порядок сортировки (и, тем самым, принятый способ хранения данных в индексах). В качестве примера рассмотрим, какие правила определяют равенство символов при использовании нескольких различных опций упорядочения, приведенных в табл. 8.L Кроме того, в этой таблице приведена информация о порядке сортировки и о том, какие условия равенства применяются при выполнении операций сравнения данных. Таблица 8.1. Правила определения равенства символов при использовании различных опций упорядочения
Итак, в соответствии с приведенными выше сведениями необходимо учитывать то, как влияет на использование индексов та информация об упорядочении, которая определена для данных, представленных в базе данных. Опции упорядочения могут быть определены на уровне базы данных и на уровне столбца, поэтому разработчик имеет в своем распоряжении довольно мощные возможности по определению степени детализации управления опциями упорядочения. Но если будет решено задать опцию, предусматривающую отсутствие чувствительности к регистру на уровне сервера, то об этом следует обязательно упомянуть в документации на разрабатываемую систему. Если это требование не будет учтено, то необходимо будет подготовиться к приему бесчисленных звонков в службу технической поддержки, особенно если продажа программного продукта осуществляется за пределг1ми того гocyдapctвa, в котором оно разработано. Чтобы понять важность этого требования, достаточно представить себе, что какой-либо независимый поставщик программного обеспечения (Independent Software Vendor - ISV) выполнил поставку вашего tiporpaMMHoro продукта заказчику, который установил этот продукт на существующем сервере (а это вполне разумное решение, поскольку вряд ли кто-либо станет покупать отдельный компьютер для каждой программы), но на этом действующем сервере применяются опции, предусматривающие учет регистра. В таком случае вам придется приготовиться к тому, что будут поступать жалобы от очень недовольных заказчиков. После того как база данных, в которой задан определенный способ упорядочения, примет некоторый объем данных, задача перехода к другому способу упорядочения становится весьма нетривиальной (хотя и разрешимой), поэтому необходимо тщательно обосновать применяемый способ упорядочения и только после этого определить соответствующую опцию. Одна из важнейших структур данных: В-деревья Очевидно, что подход к созданию индексов, основанный на использовании сбалансированного дерева (Balanced Tree- В-Тгее), впервые бьш применен задолго до создания программного обеспечения SQL Server. А в настоящее время сбалансированные деревья (или сокращенно В-деревья) используются в очень многих системах индексации, относящихся и не относящихся к миру баз данных. Вообще говоря, В-дерево- это структура данных, позволяющая использовать единообразные и относительно недорогие методы поиска способов выборки конкретных фрагментов информации. Само то, что в названии этой структуры данных применяется слово сбалансированный (Balanced- В), говорит о многом. Дело в том, что такая структура данных, как В-дерево, обеспечивает автоматическую поддержку сбалансированности узлов. Кроме того, само В-дерево является типичным представителем древовидных структур данных (достаточно отметить, что в В-дереве существует один и только один путь между любыми двумя вершинами). Кроме того, визуальное представление такой сбалансированной структуры данных также весьма напоминает дерево (состоящее из ветвей и узлов). И действительно, после того, как структура данных В-дерева, изображенная в том виде, в каком ее принято вычерчивать (с ветвями, направленными вниз), будет перевернута, она принимает общую форму дерева. Формирование В-дерева начинается с образования корневого узла (в этом заключается еще одна аналогия с деревом, растущим из одного корня, но далеко не последняя). Если количество данных, доступ к которым осуществляется с помощью индекса, невелико, то найти непосредственное указание на действительное местонахождение искомых данных можно сразу же с помощью корневого узла. В таком случае в конечном итоге формируется структура, которая выглядит так, как показано на рис. 8.2. Итак, поиск в индексе начинается с корневого узла, после чего просмотр строк в этом узле осуществляется до тех пор, пока не обнаруживается указатель на последнюю страницу, которая начинается со значения меньше искомого. Затем происходит выборка указателя на узел, содержащий сведения об этой странице, и просмотр ее до тех пор, пока не обнаружится требуемая строка. Корневой узел
Рис. 8.2. Структура В-дерева на начальном этапе формирования Но в большинстве ситуаций количество данных в столбце, поиск в котором осуществляется с помощью индексов, слишком велико для того, чтобы можно было поместить все указатели на эти данные в корневой узел, поэтому корневой узел применяется для хранения указателей на промежуточные узлы, или так назьшаемые узлы уровня, отличного от листового. Узлы уровня, отличного от листового, представляют собой узлы, находящиеся на одном из уровней между корнем и тем узлом, который позволяет узнать, где физически хранятся данные. В свою очередь, узлы уровня, отличного от листового, могут указывать либо на узлы другого уровня, отличного от листового, либо на узлы листового уровня (в этом состоит последний обещанный аналог с деревом, поскольку дерево оканчивается листьями). Узлы листового уровня представляют собой узлы, позволяющие получить реальную ссылку на фактические физические данные. Во многом аналогично тому, что процесс перемещения по ветвям дерева оканчивается достижением отдельного листа, процесс продвижения по индексу оканчивается достижением узла листового уровня, а от этого узла индекса мы можем непосредственно перейти к узлу с данными, в котором хранятся действительные искомые данные. Как показано на рис. 8.3, поиск данных в многоуровневом индексе, как и прежде, начинается с корневого узла, после этого происходит переход к узлу, который начинается с наивысшего значения, меньшего или равного искомому значению и, кроме того, находящемуся на следующем, нижележащем уровне. После этого данный процесс повторяется: отыскивается узел, имеющий наибольшее начальное значение, меньшее или равное искомому значению. Этот процесс перемещения с одного уровня дерева на другой, нижележащий уровень продолжается вплоть до листового уровня; на этом уровне обнаруживается физическое местонахождение данных, после чего может быть быстро выполнен переход к этим данным.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |