1亿个表

时间:2018-04-25 23:36:10

标签: sql oracle

以下是SMAPLE查询。我怎样才能最佳地写出来?它正在扫描大约8000万条记录。它一起运行数小时没有任何结果

选择* FROM(SELECT组织,ROW_NUMBER()OVER(PARTITION BY empno,sal ORDER BY deptno DESC)AS row_num 来自emp)x 哪里 x.row_num = 1 和 x.organization!= 3

Beloe是我尝试过的,根本没有帮助..

deptno上的独特索引

COMPOSITE INDEX ON(empno,sal)

组织列上的附加NON-UNIQUE索引

我尝试将不等式条件重写为x.organization< 3或x.organization> 3没有运气

没有什么能帮助产生结果..他们查询只运行了几个小时没有结果

请咨询

2 个答案:

答案 0 :(得分:0)

对于此查询:

SELECT *
FROM (SELECT empname,
             ROW_NUMBER() OVER (PARTITION BY empno, sal ORDER BY deptno DESC) AS row_num
      FROM  emp
     ) x
Where x.row_num = 1;

最佳指数为emp(empno, sal, deptno desc)

尝试相关子查询可能会更快:

select e.*
from emp e
where e.deptno = (select max(e2.deptno) from emp e2 where e2.empno = e.empno and e2.sal = e.sal);

答案 1 :(得分:0)

我认为您需要empno, sal deptno上的综合索引。

这将加快速度,因为订单将完成,数据库将不必进行排序

但我错了 - 解释计划会有所帮助