МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Інститут КНІТ
Кафедра ПЗ
ЗВІТ
До лабораторної роботи № 3
На тему: “ Оптимізація запитів ”
З дисципліни : " Бази даних. Частина 2 "
Лектор:
Доцент
Павич Н.Я.
Тема роботи: Оптимізація запитів
Мета роботи: Навчитися використовувати оптимізатор запитів.
Індивідуальне завдання
Створити базу даних із архітектурою таблиць згідно варіанту.
Всі новостворені об’єкти бази даних помістити у наперід створену схему бази даних.
Внести відповідні дані у таблиці.
Виконати індивідуальне завдання згідно варіанту для відповідної навчальної бази даних.
Проглянути план виконання запиту.
Використовуючи SQL Query Аnalyzer и SQL Profiler здійснити оптимізацію запиту. Якщо запит надто простий, то ускладнити його штучно зайвими операціями.
Привести отриманий план запиту.
Варіант 24.
Порахувати залишок грошових коштів на початок дня 15/04/01 на кожному пункті прийому для бази даних зі звітністю не частіше одного разу на день. Висновок: пункт, залишок.
Результати виконання завдання
Створюємо схему бази даних:
USE [RCompany]
GO
CREATE SCHEMA [ComSchema] AUTHORIZATION [CompanyEmployee]
GO
Створюємо структуру бази дних та поміщаємо всі об’єкти у раніше створену схему:
USE [RCompany]
GO
create table ComSchema.Income(
code int not null Primary key,
point tinyint not null,
[date] datetime not null,
inc smallmoney not null
)
go
create table ComSchema.Outcome(
code int not null Primary key,
point tinyint not null,
[date] datetime not null,
[out] smallmoney not null
)
go
create table ComSchema.Income_o(
point tinyint not null,
[date] datetime not null,
inc smallmoney not null
constraint PK_Income_o primary key clustered ( point, [date] )
)
go
create table ComSchema.Outcome_o(
point tinyint not null,
[date] datetime not null,
[out] smallmoney not null
constraint PK_Outcome_o primary key clustered ( point, [date] )
)
go
В результаті отримаємо наступний вигляд структури бази даних :
Заносимо дані в таблиці:
use RCompany
go
insert into ComSchema.Income_o
(point, [date], inc) Values
(1, '2001-04-15', 2569),
(2, '2001-04-15', 12457),
(3, '2001-04-15', 5497),
(4, '2001-04-15', 21446),
(5, '2001-04-15', 2479),
(1, '2001-04-16', 2569),
(2, '2001-04-16', 21457),
(3, '2001-04-16', 6354),
(4, '2001-04-16', 9845),
(5, '2001-04-16', 4215)
go
insert into ComSchema.Outcome_o
(point, [date], out) Values
(1, '2001-04-15', 569),
(2, '2001-04-15', 2457),
(3, '2001-04-15', 3000),
(4, '2001-04-15', 10457),
(5, '2001-04-15', 1475)
go
Виконання індивідуально завдання:
Запит:
use RCompany
go
SET STATISTICS IO ON;
select i.point as point, i.inc - o.[out] as result
from ComSchema.Income_o i
join ComSchema.Outcome_o o
on i.[date] = o.[date] and i.point = o.point and i.[date] = '2001-04-15';
SET STATISTICS IO OFF;
План виконання запиту:
Повідомлення про ввід/вивід
Table 'Outcome_o'. Scan count 0, logical reads 10, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Income_o'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Для оптимізації запиту використаємо підказку FAST n.
Оптимізований запит:
select i.point as point, i.inc - o.[out] as result
from ComSchema.Income_o i
join ComSchema.Outcome_o o
on i.[date] = o.[date] and i.point = o.point and i.[date] = '2001-04-15'
option (fast 5);
Повідомлення про ввід/вивід
Table 'Income_o'. Scan count 1, logical reads 11, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Outcome_o'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Висновок
На даній лабораторній роботі я навчився використовувати оптимізацію запитів, користуватися засобами SQL Query Аnalyzer і SQL Profiler, навчився переглядати плани виконання запитів та впливати на їх зміну.