【发布时间】:2021-09-01 14:43:31
【问题描述】:
我需要找到 10 名员工当前工资与他们被录用时的薪水之间的最大差异和 10 名差异最小的员工。 该表类似于salary table,包含 2844047 条记录。 我的代码是:
WITH t1 AS (
SELECT emp_no, FIRST_VALUE(salary) OVER (PARTITION BY emp_no ORDER BY from_date) AS `first`
FROM salaries),
t2 AS (
SELECT emp_no, salary AS last
FROM salaries
WHERE to_date = '9999-01-01')
(SELECT DISTINCT emp_no, last - first AS `diff`
FROM t1
INNER JOIN t2 USING (emp_no)
ORDER BY `diff`
LIMIT 10)
UNION ALL
(SELECT DISTINCT emp_no, last - first AS `diff`
FROM t1
INNER JOIN t2 USING (emp_no)
ORDER BY `diff` DESC
LIMIT 10);
但执行此操作需要很多时间。
to_date = '9999-01-01' 表示员工仍在工作的条件。
如何优化这个查询,让它执行得更快?
【问题讨论】:
-
这听起来像是横向连接的工作,但这是 mysql/maria 仍然所没有的。
标签: sql performance optimization mariadb query-optimization