Лабораторная работа 1 Индексы

advertisement
Лабораторная работа №1. Изучение индекса
Цель: Повышение производительности
индексирования базы данных.
Задача 1
Задача 2
Задача 3
SQL
Server
за
счет
Задачи
Использование индекса и просмотр его свойств
Создание кластеризованного индекса
Создание некластеризованных индексов
Задача 1
Использование индекса и просмотр его свойств
В этом упражнении вы просмотрите свойства индекса с помощью
системной хранимой процедуры sp_helpindex, а затем создадите операторы
SELECT, использующие различные индексы. После исполнения каждого из
этих операторов вы определите по плану исполнения, какой индекс
использовал оптимизатор запросов. В последнем задании вы создадите
составной индекс и исполните запрос, использующий этот индекс.
Шаг 1. Просмотр свойств индекса в БД Northwind
Порядок выполнения:
1. Подключитесь к локальному серверу.
2. На панели Editor в окне Query введите и исполните следующий код:
USE Northwind
GO
sp_helpindex customers
На панели Results появятся пять индексов.
3. Какой индекс отражает порядок сортировки таблицы Customers?
4. Есть ли в таблице Customers составной индекс?
Шаг 2. Исполнение запросов и просмотр плана исполнения
Порядок выполнения:
1. В меню Query, выберите Include Actual Execution Plan.
2. В окне Query введите и исполните следующий код:
USE Northwind
GO
SELECT * FROM customers
На вкладке Results появляется результирующий набор. Обратите
внимание, что он упорядочен по значению CustomerID.
5. Щелкните вкладку Execution Plan.
План исполнения выводится на вкладке Execution Plan панели Results.
Обратите внимание, что оптимизатор запросов использовал кластерный
индекс PK_Customers. На вкладке Execution Plan
PK_Customers обрезано до РК_Cu....
6. В окне Query введите и исполните следующий код:
имя
индекса
SELECT City, CustomerID FROM Customer
На вкладке Results появляется результирующий набор. Обратите
внимание, что он отсортирован по значению City.
7. Щелкните вкладку Execution Plan.
План исполнения показывает, что оптимизатор запросов использовал
некластеризованный индекс City.
8. Почему оптимизатор запросов в этом случае выбрал индекс City, а не
PK_Customers?
9. В окне Query введите и исполните следующий код:
SELECT CompanyName, ContactName, City, Country, Phone
FROM Customer
На вкладке Grids панели Results появляется результирующий набор.
Обратите внимание, что он упорядочен по значению столбца CompanyName.
Этот порядок сортировки на самом деле соответствует порядку столбца
CustomerID, значения которого включают, по крайней мере, первые три
символа значений столбца CompanyName.
10. Щелкните вкладку Execution Plan.
Задача 2
Создание кластеризованного индекса
В этом упражнении вы создадите кластеризованный индекс, а затем
отключите и включите его.
Порядок выполнения:
1. Запустите SQL Server Management Studio (SSMS), подключитесь к своему
экземпляру и откройте новое окно запроса.
2. Измените контекст на базу данных AdventureWorks.
3. Создайте кластеризованный индекс для столбца PostTime таблицы
DatabaseLog, выполнив следующие действия:
 Раскройте узел Таблицы (Tables). В контекстном меню таблицы
dbo.DatabaseLog выберите команду Изменить (Modify).
 В меню Конструктор таблиц (Table Designer) щелкните команду
Индексы/Ключи (Indexes/Keys) для вывода диалогового окна
Индексы/Ключи (Indexes/Keys).
 Чтобы добавить индекс, щелкните кнопку Добавить (Add).
 Щелкните поле Столбцы (Columns), затем – кнопку с троеточием,
расположенную справа от поля. Отобразится диалоговое окно
Столбцы индекса (Index Columns).
 В столбце Имя столбца (Column Name) используйте
раскрывающийся список с названиями столбцов таблицы, чтобы
выбрать PostTime, который следует включить в индекс.

По окончании выбора столбцов для индекса щелкните кнопку ОК,
чтобы закрыть диалоговое окно Столбцы индекса (Index
Columns). Мы возвращаемся в диалоговое окно Индексы/Ключи
(Indexes/Keys)
 По умолчанию для типа объекта в поле Тип (Туре) установлено
значение Индекс (Index). В поле Имя (Name) следует ввести имя
индекса cl_idx_time, в поле Описание (Description) – его описание.
 Так как для выбранного столбца нужно создать кластерный индекс,
установите параметр Создать кластеризованный (Create As
Clustered) в значение Да (Yes). В противном случае будет создан
некластеризованный индекс. Помните, что можно иметь только
один кластерный индекс на таблицу, поэтому если он уже есть,
таблица окажется недоступной для выбора.
4. Выполните следующий запрос, чтобы убедиться, что из таблицы можно
извлечь данные:
SELECT * from dbo.DatabaseLog;
5. Отключите индекс, выполнив следующую команду:
ALTER INDEX cl_idx_time
ON dbo.DatabaseLog DISABLE;
6. Чтобы проверить, что таблица недоступна, выполните следующий
запрос:
SELECT * from dbo.DatabaseLog;
7. Включите кластеризованный индекс и проверьте, что таблица доступна,
выполнив следующий запрос:
ALTER INDEX cl_idx_time ON dbo.DatabaseLog REBUILD;
GO
SELECT * from dbo.DatabaseLog;
Задача 3
Создание некластеризованных индексов
В этом упражнении нужно добавить некластеризованный индекс для
таблиц, созданных ранее.
Порядок выполнения:
1. Если необходимо, запустите SSMS, подключитесь к своему экземпляру и
откройте новое окно запроса.
2. Поскольку обычно выполняется поиск клиентов по городам, добавьте
некластеризованный индекс для столбца City таблицы Customer Address
следующим образом:
CREATE NONCLUSTERED INDEX idx_CustomerAddress_City
ON dbo.CustomerAddress(City);
Практические задания
Упражнение 1. В своих базах данных найдите все таблицы, не
имеющие первичных ключей. Для каждой из них добавьте первичный ключ.
Упражнение 2. В своих базах данных найдите все таблицы, не
имеющие кластеризованных индексов. Для каждой из них добавьте
кластеризованный
индекс
или
измените
первичный
ключ
на
кластеризованный.
Упражнение 3. Найдите в своей среде медленно выполняющиеся
запросы. Создайте некластеризованные индексы, которые могут
использоваться оптимизатором запросов для выполнения этих запросов.
Упражнение 4. Найдите запросы, для выполнения которых можно
воспользоваться преимуществами покрывающих индексов. Если индексов,
покрывающих эти запросы, еще нет, с помощью включенных столбцов
добавьте дополнительные столбцы в соответствующий индекс, чтобы
превратить его в покрывающий.
Download