МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Інститут КНІТ
Кафедра ПЗ
ЗВІТ
До лабораторної роботи № 3
На тему: “ Оптимізація запитів ”
З дисципліни : " Бази даних. Частина 2 "
Лектор:
Доцент
Павич Н.Я.
Тема роботи: Оптимізація запитів
Мета роботи: Навчитися використовувати оптимізатор запитів.
Індивідуальне завдання
Створити базу даних із архітектурою таблиць згідно варіанту.
Всі новостворені об’єкти бази даних помістити у наперід створену схему бази даних.
Внести відповідні дані у таблиці.
Виконати індивідуальне завдання згідно варіанту для відповідної навчальної бази даних.
Проглянути план виконання запиту.
Використовуючи SQL Query Аnalyzer и SQL Profiler здійснити оптимізацію запиту. Якщо запит надто простий, то ускладнити його штучно зайвими операціями.
Привести отриманий план запиту.
Варіант 6. Знайдіть середню швидкість ПК, випущених виробником A.
Варіант 24*.
Порахувати залишок грошових коштів на початок дня 15/04/01 на кожному пункті прийому для бази даних зі звітністю не частіше одного разу на день. Висновок: пункт, залишок.
Результати виконання завдання
1.Створення бази даних і чотирьох таблиць: Product, PC, Laptop, Printer. Відповідні SQL скрипти:
USE [DateBaseKlyovan]
GO
CREATE TABLE [ComputerFirm].[MyProduct](
[maker] [varchar](10) PRIMARY KEY,
[model] [varchar](50) NOT NULL,
[type] [varchar](50) NOT NULL
)
GO
USE [DateBaseKlyovan]
GO
CREATE TABLE [ComputerFirm].[MyPC](
[code] [int] PRIMARY KEY,
[model] [varchar](50) NOT NULL,
[speed] [smallint] NOT NULL,
[ram] [smallint] NOT NULL,
[hd] [real] NOT NULL,
[cd] [varchar](10) NOT NULL,
[price] [money] NULL
)
GO
USE [DateBaseKlyovan]
GO
CREATE TABLE [ComputerFirm].[MyLaptop](
[code] [int] PRIMARY KEY,
[model] [varchar](50) NOT NULL,
[speed] [smallint] NOT NULL,
[ram] [smallint] NOT NULL,
[hd] [real] NOT NULL,
[price] [money] NULL,
[screen] [tinyint] NOT NULL
)
GO
USE [DateBaseKlyovan]
GO
CREATE TABLE [ComputerFirm].[MyPrinter](
[code] [int] PRIMARY KEY,
[model] [varchar](50) NOT NULL,
[color] [char](1) NOT NULL,
[type] [varchar](10) NOT NULL,
[price] [money] NULL
)
GO
Вигляд таблиць та встановлених зв’язків на діаграмі:
2. Створення схеми бази даних:
USE [DateBaseKlyovan]
GO
CREATE SCHEMA [ComputerFirm] AUTHORIZATION [UserKlyovan]
GO
Задання створеної схеми схемою за замовчуванням для даного користувача. Після цього всі новостворені таблиці поміщатимуться в цю схему:
USE [DateBaseKlyovan]
GO
ALTER USER [UserKlyovan] WITH DEFAULT_SCHEMA=[ComputerFirm]
GO
3. Внесення відповідних даних у таблиці:
INSERT INTO [DataBaseKlyovan].[ComputerFirm].[MyProduct]
VALUES ('Samsung','1428','PC');
INSERT INTO [DataBaseKlyovan].[ComputerFirm].[MyProduct]
VALUES ('Samsung','1429','PC');
INSERT INTO [DataBaseKlyovan].[ComputerFirm].[MyProduct]
VALUES ('Samsung','1621','Laptop');
INSERT INTO [DataBaseKlyovan].[ComputerFirm].[MyProduct]
VALUES ('HP','3734','Laptop');
INSERT INTO [DataBaseKlyovan].[ComputerFirm].[MyProduct]
VALUES ('HP','3992','Printer');
INSERT INTO [DataBaseKlyovan].[ComputerFirm].[MyProduct]
VALUES ('SomeFirm','7144','PC');
INSERT INTO [DataBaseKlyovan].[ComputerFirm].[MyProduct]
VALUES ('SomeFirm','7321','Laptop');
INSERT INTO [DataBaseKlyovan].[ComputerFirm].[MyProduct]
VALUES ('SomeFirm','7979','Printer');
INSERT INTO [DateBaseKlyovan].[ComputerFirm].[MyPC]
VALUES(40,'1428',1200,512,160,'52x',250);
INSERT INTO [DateBaseKlyovan].[ComputerFirm].[MyPC]
VALUES (41,'1428',1200,1024,500,'52x',350);
INSERT INTO [DateBaseKlyovan].[ComputerFirm].[MyPC]
VALUES (84,'7144',1500,2048,320,'52x',500);
INSERT INTO [DateBaseKlyovan].[ComputerFirm].[MyLaptop]
VALUES(44,'1621',1200,512,160,400,15);
INSERT INTO [DateBaseKlyovan].[ComputerFirm].[MyLaptop]
VALUES (72,'3734',800,256,80,250,14);
INSERT INTO [DateBaseKlyovan].[ComputerFirm].[MyLaptop]
VALUES (87,'7321',1500,1024,240,NULL,15);
INSERT INTO [DateBaseKlyovan].[ComputerFirm].[MyPrinter]
VALUES(75,'3992','y','Laser',200);
INSERT INTO [DateBaseKlyovan].[ComputerFirm].[MyPrinter]
VALUES(88,'7979','n','Jet',140);
INSERT INTO [DateBaseKlyovan].[ComputerFirm].[MyPrinter]
VALUES(89,'7979','n','Matrix',120)
Виконання індивідуально завдання:
Запит:
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, навчився переглядати плани виконання запитів та впливати на їх зміну.