first commit

This commit is contained in:
Vitalii Litvinchuk
2026-05-04 23:15:09 +03:00
commit 6deed0469a
49 changed files with 5366 additions and 0 deletions
+115
View File
@@ -0,0 +1,115 @@
###############################################
############### Завдання #################
###############################################
################################################
############### Завдання 1 #################
Для того, щоб швидко вивести інформацію про замовлення було створено такий запит:
SELECT * FROM Orders;
---------------------------------------------------
1. Оптимізуйте даний запит, якщо відомо, що потрібна інформація представлена у полях
OrderID, ProductID, Quantity та Date.
select OrderID, ProductID, Quantity, Date from Orders;
################################################
############### Завдання 2 #################
Для того, щоб вивести замовлення розміщене клієнтом з ідентифікатором Cl1 було створено наступний запис:
SELECT * FROM Orders WHERE ClientID = 'Cl1';
---------------------------------------------------
1. Виконайте наступний запит,
щоб переглянути параметри плану виконання.
EXPLAIN SELECT * FROM Orders WHERE ClientID = 'Cl1';
Значення деяких полів:
type
-- містиь значення ALL, яке свідчить, що для пошуку потрібного значення була просканована уся таблиця.
-- це найгірший тип сканування, який зазвичай вказує на відсутність відповідних індексів у таблиці
possible_keys
-- цей стовпець показує ключі, які може використовувати MySQL для пошуку рядків у таблиці;
-- значення стовпця дорівнює NULL, це означає, що відповідні індекси не знайдено.
key
-- вказує фактичний індекс, який використовує MySQL;
-- у нашому видку стовпець містить значення NULL, яке вказує на те, що в таблиці немає ключів або індексів, які MySQL може використовувати для пошуку або фільтрації рядків
rows
-- кількість опрацьованих рядків для отримання результату
Extra
--Примітки
Ситуацію можна виправити шляхом створення індексу.
---------------------------------------------------
2. З метою оптимізації запиту створіть index з іменем IdxClientID на потрібному полі таблиці Orders.
create index IdxClientID on Orders (ClientID);
drop index IdxClientID on Orders;
---------------------------------------------------
3.Як тільки індекс буде створено, повторно виконайте той же запит SELECT з операторм EXPLAIN.
Порівняйте результати й зробіть висновки.
explain select * from Orders where ClientID = 'Cl1';
################################################
############### Завдання 3 #################
Для пошуку повної інформації про працівника з прізвищем 'Tolo' було написано такий запит:
SELECT * FROM Employees WHERE FullName LIKE '%Tolo';
FullName містить імя та прізвище працівника
Якщо у стовпці FullName є індекс, то запит не зможе його використати, оскільки в умові пропозиції WHERE він містить на початку груповий символ (%).
Для уникнення систуації використання в умові WHERE на початку групового символа (%) виконайте такі кроки:
---------------------------------------------------
1: Додайте новий стовпець ReverseFullName до таблиці Employees.
alter table Employees
add column ReverseFullName varchar(100) default CONCAT(
SUBSTRING_INDEX(FullName, ' ', -1),
' ',
SUBSTRING_INDEX(FullName, ' ', 1)
);
alter table Employees
add column asd integer unique auto_increment primary key;
---------------------------------------------------
2: Заповніть стовпець ReverseFullName значенням з повного імені працівників але у порядку "Прізвище І’мя".
select * from Employees;
update Employees
set
ReverseFullName = CONCAT(
SUBSTRING_INDEX(FullName, ' ', -1),
' ',
SUBSTRING_INDEX(FullName, ' ', 1)
);
---------------------------------------------------
2.1: Перегляньте новостворений стовбець
select ReverseFullName from Employees;
---------------------------------------------------
3: Створіть індекс з іменем IdxReverseFullName на основі стовпця ReverseFullName.
create index IdxReverseFullName on Employees (ReverseFullName);
drop index IdxReverseFullName on Employees;
---------------------------------------------------
4. Перепишіть запит із використанням вже новоствореного стовпця.
select * from Employees where ReverseFullName like 'Tolo%';
explain select * from Employees where ReverseFullName like 'Tolo%';