Оптимизация запросов Oracle на 100 миллионов таблиц - PullRequest
0 голосов
/ 26 апреля 2018

Ниже приведен запрос SMAPLE.Как я могу написать это оптимально ??Он сканирует около 80 миллионов записей. Он часами работает безрезультатно

select * FROM (ВЫБРАТЬ организацию, ROW_NUMBER () OVER (PARTITION BY empno, sal ORDER BY deptno DESC) AS row_num FROM emp) xГде x.row_num = 1 И x.organization! = 3

Белое - это все, что я пробовал, но это не помогло.

УНИКАЛЬНЫЙ индекс по дептно

КОМПОЗИЦИОННЫЙ ИНДЕКС ВКЛ (empno, sal)

Дополнительный НЕУНИКАЛЬНЫЙ индекс для столбца Организация

Я попытался переписать условие неравенства как x.organization <3 или x.organization> 3 безудача

Ничто не помогает в достижении результатов .. они запрашивают просто часы в течение нескольких часов без результатов

пожалуйста, совет

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Я думаю, вам нужен составной индекс для empno, sal deptno.

Это ускорит процесс, так как упорядочение будет выполнено, и БД не придется выполнять сортировку

Но яможет ошибаться - план объяснения поможет

0 голосов
/ 26 апреля 2018

Для этого запроса:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...