Customers, Orders, Order Details и Products в пользовательской базе данных. На рисунке ниже приведена диаграмма структуры и связей этих таблиц:
Рис. 1. Структура таблиц Customers, Orders, Order Details и Products
39
2. Выполнить оптимизацию запроса путем ручного создания индексов:
Построить SQL-запрос к таблице Customers с фильтрациями по идентификатору заказчика и нескольким другим полям.
Получить план выполнения запроса без использования индексов.
Оценить эффективность выполнения запроса с помощью статистики выполнений операций ввода-вывода и временных характеристик исполнения запроса в Microsoft Query Analyzer и
сохранить эти отчеты в файле (например, report1_before.rpt) для последующего сравнения, поставив курсор в окно с результатами
выполнения |
запроса |
и |
воспользовавшись |
||||
пунктом меню File -> Save As.... |
|
|
|||||
Создать несколько индексов по используемым в |
|||||||
запросе |
полям с |
помощью |
мастера или |
с |
|||
помощью |
|
средств |
|
управления |
|||
индексами Microsoft Enterprise Manager |
|
||||||
Получить |
план |
выполнения запроса с |
|||||
использованием индексов и сравнить его с |
|||||||
первоначальным планом. |
|
|
|
||||
Оценить |
эффективность |
|
выполнения |
||||
оптимизированного |
|
запроса |
с |
помощью |
|||
статистики выполнений операций ввода-вывода и |
|||||||
временных характеристик исполнения запроса, |
|||||||
сравнить |
их |
с |
характеристиками |
до |
|||
индексирования и сохранить эти отчеты в файле |
|||||||
(например, report1_after.rpt). |
|
|
|
||||
3. Выполнить |
оптимизацию |
запроса с |
помощью |
||||
мастера Index Tuning Wizard: |
|
|
|
|
|||
Построить |
SQL-запрос |
к |
связанным |
||||
таблицам Customers и Orders с |
фильтрациями |
по |
|||||
нескольким полям этих таблиц. |
|
|
|
||||
40
Получить план выполнения запроса без использования индексов.
Оценить эффективность выполнения запроса с
помощью |
статистики выполнений |
операций |
|||||
ввода-вывода и временных характеристик |
|||||||
исполнения запроса и сохранить эти отчеты в |
|||||||
файле. |
|
|
|
|
|
|
|
Получить |
план |
|
выполнения |
запроса |
с |
||
использованием индексов и сравнить его с |
|||||||
первоначальным планом. |
|
|
|
||||
Оценить |
эффективность |
выполнения |
|||||
оптимизированного |
запроса |
с |
помощью |
||||
статистики выполнений операций ввода-вывода и |
|||||||
временных характеристик исполнения запроса, |
|||||||
сравнить |
их |
с |
характеристиками |
до |
|||
индексирования и сохранить эти отчеты в файле. |
|||||||
4. Выполнить |
оптимизацию |
запроса |
с |
помощью |
|||
мастера Index |
|
Tuning |
|
Wizard по |
результатам |
||
трассировки |
запросов |
с |
помощью Microsoft |
SQL |
|||
Profiler: |
|
|
|
|
|
|
|
Построить SQL-запрос ко всем 4-м связанным таблицам Customers, Orders, OrderDetails и Produc ts с фильтрациями по нескольким полям этих таблиц.
Получить план выполнения запроса без использования индексов.
Оценить эффективность выполнения запроса с помощью статистики выполнений операций ввода-вывода и временных характеристик исполнения запроса и сохранить эти отчеты в файле.
Получить план выполнения запроса с использованием индексов и сравнить его с первоначальным планом.
41
Оценить эффективность выполнения оптимизированного запроса с помощью статистики выполнений операций ввода-вывода и временных характеристик исполнения запроса, сравнить их с характеристиками до индексирования и сохранить эти отчеты в файле.
5. Закончить работу с Microsoft SQL Server.
Содержание отчета
Протокол работы в среде Microsoft Query Analyzer.
Краткие выводы о навыках, приобретенных в ходе выполнения работы.
Теоретические сведения
1. Основные принципы построения индексов
Рассмотрим пример того, как индексы могут использоваться для ускорения выборки данных. На рис. 2 показана таблица «Состав школы», содержащая имена и занимаемые должности всех работников школы:
Рис. 2. Таблица «Состав школы»
Как поступить, если из этой таблицы необходимо выбрать имена всех работников, занимающих должность техника? Можно прочитать все строки данных таблицы и отобразить имена только тех работников, которые занимают
42
должность техника. Процедура последовательного считывания всех строк таблицы в целях выполнения запроса называется сканированием таблицы. А теперь создадим индекс для столбца «Должность» таблицы «Состав щколы», или, другими словами, проиндексируем эту таблицу по столбцу «Должность». Результаты этой работы представлены на рис. 3:
Рис. 3. Индекс по столбцу «Должность» таблицы «Состав школы»
Показанный на рис. 3 индекс содержит указатель на данные. Воспользуемся этим индексом для выполнения того же запроса. Вместо полного сканирования таблицы «Состав щколы» считывается только первая строка индекса и проверяется должность. Если это не интересующее нас значение «Техник», считывается следующая строка, и так, пока не будет найдена первая строка с требуемым значением. Из найденной строки выбирается указатель на запись, представляющий собой точный последовательный номер соответствующей строки таблицы «Состав щколы». Чтение строк индекса продолжается до тех пор, пока в его строках будет содержаться требуемое значение «Техник», после чего обработка индекса прекращается.
Для понимания того, как подобный алгоритм поиска нужной строки помогает ускорить выполнение запроса, кратко рассмотрим физическую структуру хранимых данных MSSQL.
43