select decode(no, 1, job, 2, null) as job, sum(sal)
from emp_large e, (
select rownum no
from dual
connect by level <= 2
) v
group by decode(no, 1, job, 2, null)
order by job;
select * from table(dbms_xplan.display_cursor(null, null, 'allstats last'));
-- 튜닝 후
create index emp_large_job_sal on emp_large(job,sal);
select /*+ index(emp_large emp_large_job_sal) */ job, sum(sal)
from emp_large
where job > ' '
group by rollup(job);
select * from table(dbms_xplan.display_cursor(null, null, 'allstats last'));
CREATE TABLE EMP_LARGE_PART (
EMPNO NUMBER(10),
JOB VARCHAR2(20),
MGR NUMBER(10),
HIREDATE DATE,
SAL NUMBER(10,2),
COMM NUMBER(10,2),
DEPTNO NUMBER(10)
)
PARTITION BY LIST (JOB) (
PARTITION P_CLERK VALUES ('CLERK'),
PARTITION P_SALESMAN VALUES ('SALESMAN'),
PARTITION P_ANALYST VALUES ('ANALYST'),
PARTITION P_MANAGER VALUES ('MANAGER'),
PARTITION P_PRESIDENT VALUES ('PRESIDENT'),
PARTITION P_DEVELOPER VALUES ('DEVELOPER'),
PARTITION P_DESIGNER VALUES ('DESIGNER'),
PARTITION P_OTHER VALUES (DEFAULT)
);
INSERT /*+ APPEND */ INTO EMP_LARGE_PART
SELECT * FROM EMP_LARGE;
COMMIT;
CREATE INDEX IDX_DEPTNO_SAL_LOCAL
ON EMP_LARGE_PART (DEPTNO, SAL)
LOCAL;
SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = 'EMP_LARGE_PART';
SELECT JOB, SUM(SAL)
FROM EMP_LARGE_PART
WHERE JOB IN ('CLERK', 'SALESMAN')
GROUP BY ROLLUP(JOB);
select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));