如何使用多选优化 SQL 查询
Posted
技术标签:
【中文标题】如何使用多选优化 SQL 查询【英文标题】:How to optimize SQL query with multiple selects 【发布时间】:2018-12-11 00:24:10 【问题描述】:我有一个使用多个 SELECTS 的查询,我需要对其进行优化,但我不知道该怎么做。
查询:
SELECT e.last_name, e.salary, t1.PROMEDIO
FROM employees e,
(
SELECT e.department_id, AVG(e.salary) PROMEDIO
FROM employees e
GROUP BY e.department_id
) t1
WHERE e.department_id = t1.department_id
AND e.salary < t1.PROMEDIO;
【问题讨论】:
第一个问题是,为什么你认为你需要优化这个?它运行缓慢还是您认为它会很慢? 【参考方案1】:最好使用窗口函数来编写这个查询:
select e.*
from (select last_name, department_id, salary,
avg(salary) over (partition by department_id) as avgsalary
from employees e
) e
where salary < avgsalary;
为了提高性能,您需要在employees(department_id, salary)
上建立索引。
【讨论】:
【参考方案2】:如果我对您的问题的理解正确,您正试图退回工资低于每个部门平均工资的所有员工。如果有,可以使用窗口函数avg() over()
:
select *
from (
select last_name, department_id, salary,
avg(salary) over (partition by department_id) avgsalary
from employees
) t
where salary < avgsalary
Online Demo
【讨论】:
以上是关于如何使用多选优化 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JOINS 和嵌套 SELECT 优化此 SQL 查询?