
- •Оглавление
- •Глава 1. Модели данных 8
- •Глава 2. Теоретические основы реляционных баз данных 31
- •Глава 8. Администрирование баз данных на примере sql Server 99
- •Введение. Понятие баз данных. Виды баз данных. Средства реализации баз данных. Основные этапы создания баз данных
- •Глава 1. Модели данных
- •1.1 Уровни представления данных. Понятия схемы и подсхемы данных
- •1.2 Модели концептуального уровня представления данных
- •1.3 Модели данных логического уровня представления данных
- •1.4 Методология idef1x построения логических моделей реляционных баз данных
- •1.5 Case-средства проектирования баз данных
- •Глава 2. Теоретические основы реляционных баз данных
- •2.1 Основные понятия. Операции обновления и реляционной алгебры
- •2.2 Реляционное исчисление кортежей и доменов
- •2.3. Языки манипулирования данными в реляционных системах
- •2.4. Понятие ключа и функциональных зависимостей
- •2.5 Нормализация отношений. 1, 2, 3, 4, 5 нормальные формы отношений
- •2.6 Описание формального алгоритма приведения отношений к третьей нормальной форме
- •2.7 Пример анализа отношений базы данных на третью нормальную форму
- •Глава 3. Физическое проектирование баз данных
- •3.1 Формат и размещение физических (хранимых) записей
- •3.2 Методы доступа к данным
- •Глава 4. Свойства баз данных
- •4.1 Целостность данных
- •4.2 Свойство безопасности и секретности баз данных
- •4.3 Восстанавливаемость, согласованность и эффективность баз данных
- •4.4 Реорганизация баз данных. Администратор баз данных. Словарь данных
- •Глава 5. Язык sql. Стандарт языка sql
- •5.1 История sql. История стандарта sql. Уровни соответствия. Классы инструкций sql
- •5.2 Идентификаторы. Константы. Операторы. Типы данных. Ограничения
- •Глава 6. Теоретические основы распределенных баз данных
- •6.1 Основные понятия систем с распределенной обработкой данных
- •6.2 Изолированность пользователей в многопользовательских системах
- •6.3 Сериализация транзакций. Методы сериализации транзакций
- •6.4 Журнализация и буферизация изменений в базах данных
- •Глава 7. Пример реализации распределённых баз данных. Ms sql Server
- •7.1. Основные характеристики ms sql Server. Системные базы данных, таблицы и хранимые процедуры. Базы данных и файлы
- •7.2 Таблицы баз данных. Создание, удаление, изменение
- •7.3 Индексы баз данных
- •7.4 Программирование на Transact sql. Комментарии. Переменные. Команды управления
- •7.5 Курсоры. Типы курсоров. Работа с курсорами
- •7.6 Правила, значения по умолчанию, представления
- •7.7 Хранимые процедуры и функции
- •7.8. Управление триггерами и транзакциями
- •7.9 Диагностика и сбор данных. Оптимизация запросов
- •7.10 Удаленный доступ к данным
- •Глава 8. Администрирование баз данных на примере sql Server
- •8.1. Система безопасности. Аутентификация. Учетные записи и роли. Планирование разрешений
- •8.2. Репликация данных. Типы репликаций
- •8.3. Перемещение данных
- •8.4. Резервное копирование и восстановление баз данных
- •8.5 Автоматизация решения административных задач. Система оповещений
- •Заключение
- •Приложение
- •Список рекомендуемой литературы
7.3 Индексы баз данных
В SQL Server существуют индексы двух типов: кластерные и некластерные индексы. Одна из особенностей кластерного индекса заключается в том, что один элемент индекса соответствует странице данных. Страница представляет собой физический блок для хранения данных объемом 8 Кбайт. После того как сервер определит страницу, он находит на странице нужную запись. Кластерный индекс реализует механизм индексно-последовательного доступа, причем индекс построен в виде бинарного дерева. После того как сервер определит страницу, он находит на странице нужную запись. Поскольку кластерный индекс позволяет выйти на первую запись результата и организовать последующий перебор таблицы в поисках остальных записей без возврата на уровень индекса, кластерные индексы отлично подходят для выборки интервалов данных. К этой категории относятся внешние ключи (объединения), списки имен и любые другие совокупности данных с последовательными ключами. Благодаря структуре кластерных индексов поиск в них обычно выполняется быстрее, чем при выборке произвольных записей для соответствующих некластерных индексов. Но это условное правило, зависящее от количества указателей, необходимых для индекса каждого типа, а также от их ширины. Иногда кластерный индекс работает значительно быстрее, а иногда вообще не дает выигрыша в скорости, хотя для большинства запросов кластерные индексы работают быстрее некластерных.
Некластерный индекс реализует механизм индексно-произвольного метода доступа. Его важнейшая особенность состоит в том, что один элемент индекса приходится на одну запись. Каждой записи в таблице назначается идентификатор. Поскольку в некластерном индексе каждый указатель соответствует одной записи, а также потому, что их указатели имеют больший размер, чем у кластерных индексов (поскольку содержат идентификатор записи, а не просто идентификатор страницы), некластерные индексы обычно занимают намного больше места. Для повышения быстродействия кластерный индекс следует создавать раньше некластерных. Создание кластерных индексов требует физической сортировки записей, а некластерные индексы содержат указатели на страницы и записи, которые приходится модифицировать при перемещении записей. (При создании кластерного индекса понадобится свободное место в базе данных в объеме отсортированной копии с индексом, или примерно 120-150% объема таблицы).
Рекомендуется помнить:
выбор индекса определяется соображениями быстродействия, а не первичным ключом или другими обстоятельствами;
для оптимизации физического размещения данных желательно иметь сгруппированный индекс в большинстве таблиц;
с ростом количества индексов (больше 5) затраты становятся чрезмерными;
в системах OLTP с оперативной обработкой транзакций создается минимальное количество индексов, что позволяет ускорить выполнение команд UPDATE, INSERT, DELETE.
Команды ведения данных при работе с таблицами соответствуют стандарту языка SQL.
7.4 Программирование на Transact sql. Комментарии. Переменные. Команды управления
Пакет – группа команд, передаваемых от клиента серверу. Пакет может содержать одну или несколько команд. Команды пакета анализируются, компилируются и выполняются как одна группа. Если сервер обнаружит ошибку, то весь пакет не будет выполнен. Разделение команд в пакете осуществляется командой GO. Пакет может быть транзакцией, может быть частью транзакции.
Обозначение однострочного комментария: -- Однострочный комментарий
Обозначение многострочного комментария:
/* Многострочные
** комментарии*/
Переменные могут быть двух типов – локальные (начинаются с символа @) и глобальные (начинаются с двух символов @@). Локальные переменные существуют в пределах сеанса, глобальные переменные используются для получения информации о сервере в целом (иногда называют функциями). Локальные переменные объявляются командой DECLARE и значения задаются командами SELECT и SET. Например:
DECLARE @R DATETIME, @C INT
SELECT @C=1
SET @R =getdate()
SELECT @C, @R
Обычно рекомендуется для присваивания переменных использовать команду SET , а не SELECT, так как первая работает быстрее. В одной команде SELECT можно присваивать значения нескольким переменным. Команда PRINT передает сообщение длиной 1024 байта обработчику сообщений клиента.
Команды условного выполнения:
IF <логическое выражение>
{ <команда> |< блок команд>}
ELSE
{ <команда> | <блок команд>}
Например, использования команды условного выполнения выглядит так:
IF (SELECT AVG(price) from titles WHERE type = “business”) >$19.6
PRINT ” Сообщение 1”
ELSE
PRINT “ Сообщение 2”
Блок команд – множество команд в операторных скобках BEGIN .. END
Цикл WHILE:
WHILE <логическое условие>
[ <команда> |< блок команд>]
[BREAK]
[CONTINUE]
END
Например, использование цикла с предусловием:
WHILE (SELECT AVG(price) FROM titles) < $25
BEGIN
UPDATE titles SET price =price*1.05
IF (SELECT COUNT(*) FROM titles WHERE price < $15) <10)
CONTINUE
ELSE
IF (SELECT MAX(price) FROM titles) >$50
BREAK
END
Команда WAITFOR переводит запрос в состояние ожидания в течение некоторого интервала или до наступления заданного времени ( и потому называется обработчиком события).
WAITFOR {DELAY “время” | TIME “время”}
Параметр DELAY заставляет пакет или процесс сделать паузу заданной длины (максимум – 24 часа). Параметр TIME останавливает процесс до наступления заданного времени. Время задается в формате hh: mi: ss. Например: WAITFOR TIME “ 22:00:00”