Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Тоу Д. -> "Настройка SQL. Для профессионалов" -> 17

Настройка SQL. Для профессионалов - Тоу Д.

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 11 12 13 14 15 16 < 17 > 18 19 20 21 22 23 .. 161 >> Следующая

36

2. Основы доступа к данным

Полное удаление и рост с нуля

Схема полного удаления и роста с нуля, показанная для экстента Т4 на рис. 2.2., отражает метод удаления всех данных для того, чтобы заполнение таблицы могло начаться заново. На рис. 2.2 все содержимое таблицы было недавно удалено, и показанные самые старые строки на самом деле не слишком устарели. Таблица будет расти еще долго до того момента, как достигнет отметки заполнения. Эта схема похожа на схему последовательного роста, показанную на Tl, но, так как таблица уже достигала своего максимального значения и с тех пор не перестраивалась, отметка заполнения не опускалась. Поэтому при полном сканировании таблицы выполняется столько же физических операций ввода-вывода, сколько и до удаления.

ПРИМЕЧАНИЕ ---------------------------------------------------------------

Команда Oracle TRUNCATE, в противоположность DELETE, может опускать отметку заполнения. В любой базе данных можно опустить отметку заполнения, удалив данные и перестроив таблицу.

Индексы

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

Индексы в В-деревьях

Наиболее распространенный и важный тип индекса — это индекс в В-дереве, который отражает структуру дерева, сбалансированную (Б означает balanced) до определенной глубины от корня до листовых блоков по каждой ветви. На рис. 2.3 показано трехуровневое В-дерево, в виде которого можно представить индекс, указывающий на 90 000-27 ООО ООО строк в таблице (это обычный диапазон размеров для трехуровневых В-деревьев).

Листовыв блоки:

(значение, идентификатор строки)...

Рис. 2.3. Индекс в трехуровневом В-дереве
Индексы в В-деревьях

37

Как оглавление в книге, индекс базы данных помогает ей быстро находить ссылки на некоторое значение или диапазон значений, которые требуется получить из таблицы. Например, индексирование Last_Name в таблице Persons позволяет быстро обращаться к списку строк таблицы, для которых Last_Name= ’SMITH' или где Last_Name>=‘X' AND Last_Name<‘Y'. Ho, в противоположность оглавлению книги, работа с индексами базы данных практически не требует никаких усилий со стороны приложения. База данных сама несет ответственность за прохождение индексов, которые выбирает для использования, и поиск строк, необходимых запросу. Причем база данных обычно сама без подсказки выбирает подходящие индексы. Однако базы данных не всегда делают правильный выбор, и материал этой книги во многом посвящен таким проблемам.

Для каждого индекса существует естественный порядок сортировки, обычно по возрастанию в соответствии с типом индексированного столбца. Например, число 11 лежит между 10 и 12, однако строка символов '11* лежит между ’ 1 ’ и 12 ’. Часто индексы охватывают несколько столбцов, но вы можете считать, что для таких индексов существует единственный ключ сортировки, составленный путем конкатенации значений нескольких столбцов с соответствующим заполнением пробелами, разрешающим сортировку второго столбца только после завершения сортировки первого столбца.

Индексный доступ всегда начинается с единственного корневого блока, в котором записано до 300 интервалов индексных значений, соответствующих данным в таблице. Если индекс составлен более чем для 300 строк (чаще всего фактическое значение зависит от размеров блоков и столбцов), то эти диапазоны обычно содержат указатели на блоки следующего уровня1. Индекс для таблицы, в которой меньше 300 строк, обычно состоит только из корневого блока, содержащего указатели прямо на индексированные строки в таблице. Такие указатели для каждой индексированной строки принимают форму адреса блока и номера строки в блоке. В любом случае, независимо от того, насколько велика таблица, вы можете предположить, что корневой блок идеально кэширован, так как каждое использование индекса обязательно начинается с этого блока.

ПРИМЕЧАНИЕ--------------------------------------------------------------------

Адрес блока и номер строки в блоке вместе называются идентификатором строки. Индексы указывают на строки в таблицах при помощи идентификаторов строки.

Будем считать, что в таблице больше 300 индексированных строк. Тогда база данных следует по указателю в корневом блоке и попадает в блок следующего уровня, который охватывает начало диапазона значений, необходимых для вашего запроса. Если же в таблице больше 90 000 индексированных строк, то блок второго уровня, в свою очередь, содержит поддиапазоны с указателями на блоки на следующем уровне. В конце концов (на первом не корневом уровне, если в таблице 300-90 000 индексированных строк) база данных придет в листовой блок, в котором содержатся точное значение, соответствующее началу требуемого диапазона (пред-

1 Я говорю об индексированных строках, противопоставляя их строкам таблицы, так как не всегда индексы указывают на все строки таблицы. Например, индексы Oracle не содержат записей, указывающих на строки со значением null во всех индексированных столбцах, поэтому индекс для столбца, большинство значений в котором равны null, может быть весьма небольшим даже на очень большой таблице, если лишь в нескольких строках для этого столбца значения ненулевые.
Предыдущая << 1 .. 11 12 13 14 15 16 < 17 > 18 19 20 21 22 23 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100