Top.Mail.Ru
Ответы

ПАМГИТЕ ПРЕПОД ДАЛ ЗАДАНИЕ НИЧЕ НЕ ПОНИМАЮ

Практическое занятие №11: Разбор и улучшение производительности запросов (Работа в парах)
Цель:
- Научиться анализировать планы выполнения SQL-запросов в Microsoft SQL Server.
- Выявлять узкие места в запросах и предлагать оптимальные решения.
- Совместно разрабатывать стратегии оптимизации.

Формат работы:
- Работа в парах.
- Один студент — "Аналитик", другой — "Оптимизатор".
- "Аналитик" анализирует производительность запроса.
- "Оптимизатор" предлагает и реализует улучшения.
- После выполнения одного задания студенты меняются ролями.

Задание 1: Анализ и оптимизация выборки пользователей и их заказов
1. Выполните следующий запрос и определите его производительность.
2. Используйте инструменты SQL Server (графический план выполнения, STATISTICS IO, `STATISTICS TIME`).
3. Найдите возможные узкие места.
4. Предложите и реализуйте способы оптимизации.
5. Сравните производительность до и после оптимизации.
6. Описать каждую строчку кода

SELECT u.Nam, u.Ema, o.ProductName, o.Quantity, o.Price
FROM Users u
JOIN Orders o ON u.I= o.UserId
WHERE o.OrderDate >= '2024-01-01';

Обсуждение:
- Какие операции используются (`Table Scan`, Index Scan, `Index Seek`)?
- Как можно ускорить выполнение запроса?

Задание 2: Оптимизация подзапроса
1. Выполните следующий запрос и определите его производительность.
2. Определите, какие операции выполняются и где могут быть узкие места.
3. Перепишите запрос, используя альтернативный подход.
4. Сравните производительность исходного и измененного варианта.
5. Описать каждую строчку кода


SELECT * FROM Users
WHERE Id IN (SELECT UserId FROM Orders WHERE OrderDate >= '2024-01-01');

Обсуждение:
- Чем IN отличается от JOIN с точки зрения производительности?
- В каких случаях IN может быть предпочтительнее?

Задание 3: Оптимизация агрегатного запроса
1. Выполните агрегатный запрос и проанализируйте его производительность.
2. Определите узкие места в плане выполнения.
3. Разработайте стратегию оптимизации.
4. Реализуйте изменения и проверьте результат.
5. Описать каждую строчку кода

SELECT p.Category, SUM(o.Quantity * o.Price) AS TotalSales
FROM Orders o
JOIN Products p ON o.ProductName = p.Nam
GROUP BY p.Category;

Обсуждение:
- Как можно ускорить этот запрос?
- В каких случаях стоит использовать индексы, а в каких — другие методы оптимизации?

Задание 4: Оптимизация сложного аналитического запроса
1. Выполните следующий запрос и разберите его план выполнения.
2. Определите его слабые места.
3. Оптимизируйте запрос, используя подходящие инструменты.
4. Сравните производительность до и после оптимизации.
5. Описать каждую строчку кода

SELECT u.Na COUNT(o.) AS OrderCount, SUM(o.Price) AS TotalSpent
FROM Users u
LEFT JOIN Orders o ON u. = o.UserId
GROUP BY u.I
HAVING COUNT(o.I) > 5
ORDER BY TotalSpent DESC;

Обсуждение:
- Какие операции занимают наибольшее время?
- Можно ли уменьшить объем данных для обработки?
- Какие индексы могут улучшить производительность?


Финальное задание: Оптимизация на 200%
1. Выберите один из сложных запросов, выполненных ранее.
2. Проведите дополнительную оптимизацию.
3. Сравните скорость выполнения до и после изменений.
4. Докажите, что производительность увеличилась минимум в 2 раза.

Обсуждение:
- Какие методы оптимизации дали наибольший эффект?
- Какие ошибки чаще всего приводят к низкой производительности?
- В каких случаях индексы не дают желаемого результата?

По дате
По Рейтингу
Аватар пользователя
Ученик
2мес

Это по литре читать?