316 lines
6.5 KiB
SQL
316 lines
6.5 KiB
SQL
|
||
SELECT statement optimization in MySQL
|
||
Оптимізація пропозиції SELECT
|
||
|
||
У цій роботі слід застосувати техніки оптимізації запитів на основі оператора SELECT, а також побудувати індекси на основі стовпців для прискорення виконання запитів.
|
||
У роботі буде використано базу даних Lucky_Shrub. Слід оптимізувати запити, які звертаються до таблиць працівників (Employees) та замовлень (Orders).
|
||
|
||
Таблиця Orders містить таку інформацію:
|
||
OrderID - ідентифікатор замовлення
|
||
ClientID - ідентифікатор клієнта
|
||
ProductID - ідентифікатор продукту
|
||
Quantity - кількість одиниць продукту
|
||
Cost - вартість замовлення
|
||
Date - дата кожного замовлення
|
||
|
||
Таблиця Employees містить таку інформацію
|
||
EmployeeID - ідентифікатор працівника
|
||
FullName - повне ім’я працівника (містить, власне, ім’я та прізвище)
|
||
Role - роль працівника
|
||
Department - відділ працівника
|
||
|
||
Передумови
|
||
1: Створити базу даних, якщо не створено
|
||
CREATE DATABASE Lucky_Shrub;
|
||
|
||
2: Використати базу даних
|
||
|
||
USE Lucky_Shrub;
|
||
|
||
3: Створити таблицю Orders (якщо не створено;
|
||
|
||
якщо створено, тоді перевірити правильність схеми таблиці)
|
||
|
||
CREATE TABLE Orders (
|
||
OrderID INT NOT NULL,
|
||
ClientID VARCHAR(10) DEFAULT NULL,
|
||
ProductID VARCHAR(10) DEFAULT NULL,
|
||
Quantity INT DEFAULT NULL,
|
||
Cost DECIMAL(6, 2) DEFAULT NULL,
|
||
Date DATE DEFAULT NULL,
|
||
PRIMARY KEY (OrderID)
|
||
);
|
||
|
||
Для перевірки схеми можна використати команду
|
||
SHOW CREATE TABLE Orders;
|
||
|
||
4: Створити таблицю Employees (якщо не створено;
|
||
|
||
якщо створено, тоді перевірити правильність схеми таблиці)
|
||
|
||
CREATE TABLE Employees (
|
||
EmployeeID INT DEFAULT NULL,
|
||
FullName VARCHAR(100) DEFAULT NULL,
|
||
Role VARCHAR(50) DEFAULT NULL,
|
||
Department VARCHAR(255) DEFAULT NULL
|
||
);
|
||
|
||
Для перевірки схеми можна використати команду
|
||
SHOW CREATE TABLE Orders;
|
||
|
||
5: Вставте дані у таблицю Orders (якщо дані у таблиці є, перевірте чи відповідають вони запропонованим, за потреби підкоригуйте)
|
||
|
||
INSERT INTO
|
||
Orders (
|
||
OrderID,
|
||
ClientID,
|
||
ProductID,
|
||
Quantity,
|
||
Cost,
|
||
Date
|
||
)
|
||
VALUES (
|
||
1,
|
||
"Cl1",
|
||
"P1",
|
||
10,
|
||
500,
|
||
"2020-09-01"
|
||
),
|
||
(
|
||
2,
|
||
"Cl2",
|
||
"P2",
|
||
5,
|
||
100,
|
||
"2020-09-05"
|
||
),
|
||
(
|
||
3,
|
||
"Cl3",
|
||
"P3",
|
||
20,
|
||
800,
|
||
"2020-09-03"
|
||
),
|
||
(
|
||
4,
|
||
"Cl4",
|
||
"P4",
|
||
15,
|
||
150,
|
||
"2020-09-07"
|
||
),
|
||
(
|
||
5,
|
||
"Cl3",
|
||
"P3",
|
||
10,
|
||
450,
|
||
"2020-09-08"
|
||
),
|
||
(
|
||
6,
|
||
"Cl2",
|
||
"P2",
|
||
5,
|
||
800,
|
||
"2020-09-09"
|
||
),
|
||
(
|
||
7,
|
||
"Cl1",
|
||
"P4",
|
||
22,
|
||
1200,
|
||
"2020-09-10"
|
||
),
|
||
(
|
||
8,
|
||
"Cl3",
|
||
"P1",
|
||
15,
|
||
150,
|
||
"2020-09-10"
|
||
),
|
||
(
|
||
9,
|
||
"Cl1",
|
||
"P1",
|
||
10,
|
||
500,
|
||
"2020-09-12"
|
||
),
|
||
(
|
||
10,
|
||
"Cl2",
|
||
"P2",
|
||
5,
|
||
100,
|
||
"2020-09-13"
|
||
),
|
||
(
|
||
11,
|
||
"Cl1",
|
||
"P2",
|
||
15,
|
||
80,
|
||
"2020-09-12"
|
||
),
|
||
(
|
||
12,
|
||
"Cl1",
|
||
"P1",
|
||
10,
|
||
500,
|
||
"2022-09-01"
|
||
),
|
||
(
|
||
13,
|
||
"Cl2",
|
||
"P2",
|
||
5,
|
||
100,
|
||
"2022-09-05"
|
||
),
|
||
(
|
||
14,
|
||
"Cl3",
|
||
"P3",
|
||
20,
|
||
800,
|
||
"2022-09-03"
|
||
),
|
||
(
|
||
15,
|
||
"Cl4",
|
||
"P4",
|
||
15,
|
||
150,
|
||
"2022-09-07"
|
||
),
|
||
(
|
||
16,
|
||
"Cl3",
|
||
"P3",
|
||
10,
|
||
450,
|
||
"2022-09-08"
|
||
),
|
||
(
|
||
17,
|
||
"Cl2",
|
||
"P2",
|
||
5,
|
||
800,
|
||
"2022-09-09"
|
||
),
|
||
(
|
||
18,
|
||
"Cl1",
|
||
"P4",
|
||
22,
|
||
1200,
|
||
"2022-09-10"
|
||
),
|
||
(
|
||
19,
|
||
"Cl3",
|
||
"P1",
|
||
15,
|
||
150,
|
||
"2022-09-10"
|
||
),
|
||
(
|
||
20,
|
||
"Cl1",
|
||
"P1",
|
||
10,
|
||
500,
|
||
"2022-09-12"
|
||
),
|
||
(
|
||
21,
|
||
"Cl2",
|
||
"P2",
|
||
5,
|
||
100,
|
||
"2022-09-13"
|
||
),
|
||
(
|
||
22,
|
||
"Cl2",
|
||
"P1",
|
||
10,
|
||
500,
|
||
"2021-09-01"
|
||
),
|
||
(
|
||
23,
|
||
"Cl2",
|
||
"P2",
|
||
5,
|
||
100,
|
||
"2021-09-05"
|
||
),
|
||
(
|
||
24,
|
||
"Cl3",
|
||
"P3",
|
||
20,
|
||
800,
|
||
"2021-09-03"
|
||
),
|
||
(
|
||
25,
|
||
"Cl4",
|
||
"P4",
|
||
15,
|
||
150,
|
||
"2021-09-07"
|
||
),
|
||
(
|
||
26,
|
||
"Cl1",
|
||
"P3",
|
||
10,
|
||
450,
|
||
"2021-09-08"
|
||
),
|
||
(
|
||
27,
|
||
"Cl2",
|
||
"P1",
|
||
20,
|
||
1000,
|
||
"2022-09-01"
|
||
),
|
||
(
|
||
28,
|
||
"Cl2",
|
||
"P2",
|
||
10,
|
||
200,
|
||
"2022-09-05"
|
||
),
|
||
(
|
||
29,
|
||
"Cl3",
|
||
"P3",
|
||
20,
|
||
800,
|
||
"2021-09-03"
|
||
);
|
||
|
||
5: Імпортуйте дані у таблицю Employees скориставшись файлом MS Excel (https://docs.google.com/spreadsheets/d/14KHqSVEqqvaPXSRSlJdHwMUJlBt6VBtr?rtpof=true&authuser=yuriy.kotsyuk%40oa.edu.ua&usp=drive_fs). Для цього здійсніть експорт даних у формат csv з екселівського файлу, після чого здійсніть імпорт у таблицю бази даних.
|
||
|
||
LOAD DATA INFILE '/var/lib/mysql-files/Employees.csv' INTO
|
||
TABLE Employees FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES (
|
||
EmployeeID,
|
||
FullName,
|
||
Role,
|
||
Department,
|
||
@dummy
|
||
);
|
||
|
||
Перевірте наявність даних після операції імпорту |