- •Базы данных
- •Бд основные понятия и определения
- •Классификация моделей бд
- •Основные понятия иерархической модели данных
- •Основные понятия сетевой модели данных
- •Основные понятия реляционных моделей данных
- •Сортировка, поиск и замена данных в таблицах
- •Индексирование данных в реляционных таблицах
- •Концептуальная модель данных, основные понятия и определения
- •Язык sql, стандарты, основные операторы sqLзапроса
- •Типы данных sql
- •Операторы создания базы данных на языке sql
- •Запросы, назначения запросов, виды запросов
- •Использование агрегированных функций запросов
- •Использование вложенных запросов
- •Операторы соединения на языке sql
- •Типы отношений в концептуальной модели данных
- •Теоретико-множественные операции реляционной алгебры (с примерами)
- •Специальные операции реляционной алгебры (с примерами)
- •Использование хранимых процедур и пользовательских функций
- •Понятие и применение триггеров
Индексирование данных в реляционных таблицах
Ответ:
Термин «индекс» тесно связан с понятием «ключ», хотя между ними есть и некоторое отличие.
Под индексом понимают средство ускорения операции поиска записей в таблице, а следовательно, и других операций, использующих поиск: извлечение, модификация, сортировка и т. д. Таблицу, для которой используется индекс, называют индексированной.
Индекс выполняет роль оглавления таблицы, просмотр которого предшествует обращению к записям таблицы. В некоторых системах, например Paradox, индексы хранятся в индексных файлах, хранимых отдельно от табличных файлов.
Варианты решения проблемы организации физического доступа к информации зависят в основном от следующих факторов:
• вида содержимого в поле ключа записей индексного файла;
• типа используемых ссылок (указателей) на запись основной таблицы;
• метода поиска нужных записей.
В поле ключа индексного файла можно хранить значения ключевых полей индексируемой таблицы либо свертку ключа (так называемый хеш-код). Преимущество хранения хеш-кода вместо значения состоит в том, что длина свертки независимо от длины исходного значения ключевого поля всегда имеет некоторую постоянную и достаточно малую величину (например, 4 байта), что существенно снижает время поиско-вых операций. Недостатком хеширования является необходимость выполнения операции свертки (требует определенного времени), а также борьба с возникновением коллизий (свертка различных значений может дать одинаковый хеш-код).
Для организации ссылки на запись таблицы могут использоваться три типа адресов: абсолютный (действительный), относительный и символический (идентификатор).
На практике для создания индекса для некоторой таблицы БД пользователь указывает поле таблицы, которое требует индексации. Ключевые поля таблицы во многих СУБД как правило индексируются автоматически. Индексные файлы, создаваемые по ключевым полям таблицы, часто называются файлами первичных индексов.
Индексы, создаваемые пользователем для не ключевых полей, иногда называют вторичными (пользовательскими) индексами. Введение таких индексов не изменяет физического расположения записей таблицы, но влияет на последовательность просмотра записей. Индексные файлы, создаваемые для поддержания вторичных индексов таблицы, обычно называются файлами вторичных индексов.
В системах управления реляционными БД индексация является механизмом повышения их производительности за счет ускорения сортировки и поиска записей.
Поля первичного ключа индексируются по умолчанию.
Поля с типами данных OLE и Вложения индексировать нельзя.
Индексирование полей целесообразно использовать если:
Они имеют тип данных Текстовый, Числовой, Денежный или Дата/Время;
По ним часто выполняется сортировка;
Они используются для поиска значений;
Они часто используются в операциях объединения.
Индекс нецелесообразно использовать, если:
Поля редко используются в запросах;
Поля часто используются в запросах на изменение;
Поля имеют только несколько возможных значений (или много повторяющихся значений), например, пол человека;
Поля небольших таблиц с несколькими записями.
В SQL Server поддерживает два типа индексов – кластерные и некластерные.
Кластерный индекс представляет собой двоичное дерево, в котором на нулевом уровне (уровне листов) содержатся страницы актуальных данных таблицы, а физически информация хранится в логическом порядке данного индекса.
В случае некластерных индексов странницы листового уровня содержат не актуальные данные таблицы (как в случае кластерного индекса), а указатель на строку данных, включающий номер страницы данных и порядковый номер записи на странице. Некластерный индекс не требует физического переупорядочения данных таблицы. Создание некластерного индекса не требует наличия в базе данных большого свободного дискового пространства, которое необходимо при создании кластерных индексов.
Для одной таблицы может быть создано не более одного кластерного индекса и до 249 некластерных индексов.
Индексы не могут быть созданы для столбцов со следующими типами данных BIT, TEXT и IMAGE. Индексы не могут также создаваться для видов.
Для создания индексов используется команда CREATE INDEX. Общий синтаксис которой показан ниже:
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]
INDEX index_name
ON table (column [,...n])
[WITH [PAD_INDEX][[,] FILLFACTOR = fillfactor][[,]
IGNORE_DUP_KEY][[,] DROP_EXISTING][[,]
STATISTICS_NORECOMPUTE]][ON filegroup],
где index_name – имя создаваемого индекса;
table – имя таблицы, в которой создается;
column – имя столбца таблицы;
PAD_INDEX – этот параметр определяет размер пространства, оставляемого открытым на каждой внутренней странице;
IGNORE_DUP_KEY – этот параметр не отменяет установленного требования уникальности ключей, но позволяет продолжить работу даже при попытке поместить в таблицу строку с дублирующимся значением уникального ключевого поля;
DROP_EXISTING – этот параметр используется только при создании кластерных индексов и определяет обработку существующих некластерных индексов таблицы;
STATISTICS_NORECOMPUTE – этот параметр блокирует автоматическое обновление статистических сведений по индексам, что потребует выполнения команды UPDATE STATISTICS вручную.
Пример создания простого индекса:
USE biblio
GO
CREATE INDEX numbil_id_ind
ON Tbl_Chiteteli (NumBillet)
GO
Пример создания уникального кластерного индекса
USE biblio
GO
CREATE UNIQUE CLUSTERED INDEX TelephonID_ind
ON Tbl_Chiteteli (Telephon)
GO
Просмотр индексов базы данных
Для получения подробных сведений о связанных с таблицами индексах можно воспользоваться командами sp_helpindex и sp_statistics.
Переименование индексов базы данных
Для переименования индекса используется системная хранимая процедура sp_rename. Команда вызова которой имеет приведенный ниже синтаксис:
Sp_rename index_old, index_new [, COLUMN | INDEX]
Удаление индексов базы данных
Для удаления индекса используется команда , формат которой показан ниже:
DROP INDEX [owner] table_name.index_name
[, [owner,] table_name.index_name]
где owner – владелец базы данных;
index_name – имя индекса;
table_name – имя таблицы, в которой удаляется индекс.
