Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти та науки України
Національний університет «Львівська політехніка»
Інститут комп’ютерних наук та інформаційних технологій
Кафедра ПЗ
ЗВІТ
до лабораторної роботи №3
з дисципліни «Бази даних (частина ІІ)»
на тему: «Оптимізація запитів в SQL Server 2008»
Мета: Навчитись підвищувати продуктивність запитів в SQL Server 2008, використовуючи оптимізатор запитів.
Завдання
1.Створити базу даних з наступною архітектурою таблиць:
- Classes (class, type, country, numGuns, bore, displacement)- Ships (name, class, launched)- Battles (name, date)- Outcomes (ship, battle, result)
2.Всі новостворені об’єкти бази даних помістити у наперед створену схему бази даних.
3.Внести відповідні дані у таблиці.
4.Знайти назви кораблів з гарматами калібру 16 дюймів (врахувати кораблі з таблиці Outcomes).
5.Проглянути план виконання запиту.
6.Використовуючи SQL Query Analyzer і SQL Profiler, здійснити оптимізацію запиту.
7.Привести отриманий план запиту.
Хід роботи
1.Створення бази даних і чотирьох таблиць: Classes, Ships, Battles, Outcomes; встановлення зв’язків між ними:
2.Поміщення всіх таблиць у наперед створену схему бази даних Ships, яка задана схемою за замовчуванням для користувача бази даних:
3.Внесення у таблиці відповідних даних:
Таблиця Classes:
Таблиця Ships:
Таблиця Battles:
Таблиця Outcomes:
4.Запит, який повертає назви кораблів з гарматами калібру 16 дюймів з урахуванням кораблів з таблиці Outcomes:
SELECT name FROM Ships.Ships
WHERE class IN (SELECT class FROM Ships.Classes
WHERE bore = 16)
UNION
SELECT ship FROM Ships.Outcomes
WHERE ship IN (SELECT class FROM Ships.Classes
WHERE bore = 16)
Назви кораблів з гарматами калібру 16 дюймів:
5.План виконання запиту:
Додаткові дані про останню вартісну операцію (Union):
6.Створення унікального некластерного індексу, що покриває звернення до таблиці Ships:
CREATE UNIQUE NONCLUSTERED INDEX ShipIndex
ON Ships.Ships(name)
INCLUDE (class)
Створення на базі таблиці Classes віртуальної таблиці з назвами класів з гарматами калібру 16 дюймів та індексу до неї:
CREATE VIEW Ships.ClassBore16
WITH SCHEMABINDING AS
SELECT class AS ShipClass FROM Ships.Classes
WHERE bore = 16
GO
CREATE UNIQUE CLUSTERED INDEX ClassViewIndex
ON Ships.ClassBore16(ShipClass)
GO
Оптимізований запит з використанням створених індексів, вибором з таблиці Outcomes тільки різних значень і заміною найбільш вартісної операції Union операцією Concatenation:
SELECT name AS ShipName FROM Ships.Ships WITH (INDEX = ShipIndex)
WHERE class IN (SELECT ShipClass FROM Ships.ClassBore16 WITH (NOEXPAND))
UNION ALL
SELECT DISTINCT ship AS ShipName FROM Ships.Outcomes
WHERE ship IN (SELECT ShipClass FROM Ships.ClassBore16 WITH (NOEXPAND))
7.План виконання запиту:
Додаткові дані про останню вартісну операцію (Concatenation):
Порівняння виконання початкового і оптимізованого запитів за допомогою трасування в SQL Profiler, а також порівняння 100-кратного виконання цих запитів:
Висновок: На цій лабораторній роботі я навчився підвищувати продуктивність запитів в SQL Server 2008, використовуючи оптимізатор запитів; створив власну базу даних, вніс у неї відповідні дані та здійснив оптимізацію запиту до неї за допомогою SQL Query Analyzer і SQL Profiler.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!