Сложные SQL-запросы: работа с подзапросами, оптимизация производительности

Давай разберем сложные SQL-запросы, работу с подзапросами и оптимизацию производительности.

Подзапросы

Подзапросы, или вложенные запросы, позволяют использовать результат одного запроса в качестве входных данных для другого. Они могут быть размещены в SELECT, FROM, WHERE и других частях основного запроса. Вот несколько примеров:

Подзапрос в SELECT:

SELECT employee_id, 
       (SELECT department_name 
        FROM departments 
        WHERE departments.department_id = employees.department_id) AS department
FROM employees;

Подзапрос в WHERE:

SELECT employee_id, employee_name
FROM employees
WHERE department_id = (SELECT department_id 
                       FROM departments 
                       WHERE department_name = 'HR');

Подзапрос в FROM:

SELECT dept.department_name, avg_salaries.avg_salary
FROM (SELECT department_id, AVG(salary) AS avg_salary
      FROM employees
      GROUP BY department_id) avg_salaries
JOIN departments dept ON dept.department_id = avg_salaries.department_id;

Оптимизация производительности

Оптимизация запросов может значительно улучшить время выполнения. Вот несколько советов:

  1. Индексы: Использование индексов на столбцах, по которым часто выполняются поисковые операции, может ускорить запросы. Однако не стоит переусердствовать — индексы замедляют операции вставки и обновления.

  2. Избегайте подзапросов в SELECT: Подзапросы в SELECT могут выполнять повторные вычисления для каждой строки результата. В таких случаях лучше использовать JOIN.

  3. Использование JOIN вместо подзапросов: В некоторых случаях замена подзапросов на JOIN может улучшить производительность.

    -- Вместо подзапроса
    SELECT e.employee_id, e.employee_name
    FROM employees e
    WHERE e.department_id IN (SELECT d.department

Last updated