first commit
This commit is contained in:
@@ -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%';
|
||||
Reference in New Issue
Block a user