본문 바로가기

전체 글

(228)
SQL - 데이터 분석 함수를 이용한 튜닝 SQL을 완전히 다른 SQL로 변경해서 튜닝하는 방법 예제 : 부서별 월급 합, 총 월급을 출력하기 select /*+ gather_plan_statistics */ deptno, sum(sal) from emp group by deptnounion allselect null as deptno, sum(sal) from emp order by deptno asc; SELECT * FROM TABLE(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); 버퍼의 수 : 12개 * rollup을 활용한 튜닝 select /*+ gather_plan_statistics */ deptno, sum(sal) from emp group by rollup(deptno); S..
ADSP 27회 합격 후기 오늘 ADSP를 치뤘다. 사실 결과는 한 달 뒤에 나오고 지금 내 점수도 가답안을 보니까 과연 60점을 맞을 수 있을지 애매한 수준이라 이렇게 벌써 후기를 적고 있는게 웃기기는 하지만 원래 후기는 그 날 바로 써야 제맛이고, 시험 끝나고 어떻게든 이렇게 행복 회로 돌리는 게 내 장기인 듯 하다. (수정) 합격~~~!!!!!! 나의 위치 : 파이썬, SQL 기본 지식 정도 ( 도움 안 됨 ) 통계 지식 : 확통, 분산, 표준편차, 정규분포, 이항 분포 아는 정도 ( 범위로 치면 너무 기본이라 내용이 거의 없기는 한데, 그래도 책이 읽히느냐 안 읽히느냐 차이는 꽤 컸을 거 같다 ) R : 모름 ( 지금 생각해도 공부하는데 기본 지식이 그렇게 중요하지는 않은 듯, 근데 간단한 코딩 문제나 함수 문제 점수는 포..
깃허브 리포지토리 복구하는 법 내일 adsp 시험을 앞두고 좀 쉬던 와중에갑자기 나는 그동안 쌓인 내 SQL 리포지토리를 정리하고 싶어졌다.시험 기간엔 도대체 왜 정리를 하고 싶어지는걸까 문득 SQL 내용을 좀 세분화해서 폴더로 나눠서 저장해야겠다는 생각이 들었다. 그래서 구글링으로 리포지토리에 폴더를 만드는 것까지는 알아냈는데, 그 폴더에 리포지토리 안에 기존에 있던 파일을 옮기는 법을 알 수가 없었다. 그래서 그냥 새 리포지토리를 만들고 다시 폴더에 직접 들어가서 파일을 다시 전부 넣자는 생각이 들었고, 결국 똑같은 리포지토리를 만들고 원래 쓰던 리포지토리를 삭제했다. 그렇게 정리를 마치고 홀가분한 기분이었는데 내 잔디 어디감?? 그렇다 리포지토리를 삭제하면 잔디도 같이 날아가버리더라 솔직히 장기간으로 보면 3주 공백이야 눈에 안..
SQL - 서브 쿼리문 튜닝 서브 쿼리문 튜닝하기 서브 쿼리문 튜닝의 기술은 크게 2가지만 알면 된다. 1. 순수하게 서브 쿼리문으로 수행되게 하는 방법 : 힌트 추가 ( no_unnest )2. 서브 쿼리를 조인으로 변경해서 수행되게 하는 방법 : 힌트 추가 ( unnest ) * nest : 감싸다 unnest : 감싸지 않다 no_unnest : 감싸라 예제 : DALLAS에서 근무하는 사원들의 이름과 월급을 출력하기 select ename, sal from emp where deptno in ( select deptnofrom deptwhere loc = 'DALLAS'); 예제 2 : 위의 서브 쿼리문을 조인으로 수행해서 출력하기 select e.ename, e.sal from emp e, dept d where e.dep..
SQL - 고급 조인 문장 튜닝 * 고급 조인 문장 튜닝 뷰 안의 조인 문장의 조인 순서를 변경하고자 할 때 사용하는 튜닝 방법 예제 : 사원 번호, 이름, 월급, 부서 번호, 부서 위치를 담은 emp_dept라는 view를 만들기 create view emp_dept as select e.empno, e.ename, e.sal, e.deptno, d.loc from emp e, dept d where e.deptno=d.deptno; 근데 컬럼명을 자세히보면 e.empno, e.ename이 아닌 empno, ename 이다.나머지도 마찬가지. 예제 : 방금 만든 emp_dept view와 salgrade 테이블을 서로 조인해서 이름과 월급과 부서 위치와 급여 등급을 출력하기 select v.ename, v.sal, v.loc, s.g..
SQL - 서브 쿼리를 활용한 튜닝 SELECT 절 중 서브 쿼리를 쓸 수 있는 절 SELECT --> O ( 스칼라 서브쿼리 ) FROM --> O ( 인 라인 뷰 ) WHERE --> O GROUP BY --> X HAVING --> O ORDER BY --> O ( 스칼라 서브쿼리 ) 예제 : 이름, 월급, 사원 테이블에서의 최대 월급 출력하기 ( 스칼라 서브 쿼리 ) select /*+ gather_plan_statistics */ ename, sal, (select max(sal) from emp) from emp; SELECT * FROM TABLE(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST')); 튜닝 : select /*+ gather_plan_statistics */ enam..
SQL - OUTER JOIN 튜닝 OUTER JOIN 의 튜닝 방법 * outer join의 조인 순서는outer join sign이 없는 쪽에서 있는 쪽으로 순서가 고정이 된다. 그러다보니 조인 순서를 변경하기가 어려워서 튜닝이 힘든데, 이를 개선할 수 있는 힌트가 있다. 일단 outer join을 연습하기 위해서, deptno가 deptno 테이블에는 없는, 특이한 사원을 하나 넣어보자 insert into emp ( empno, ename, sal, deptno )values ( 2921, 'JACK', 4500, 70 ) ; 예제 : deptno로 아우터 조인을 해보자 select /*+ gather_plan_statistics */ e.ename, d.loc from emp e, dept d where e.deptno=d.dep..
SQL - HASH JOIN, SORT MERGE JOIN OLTP 서버 : 실시간 조회 처리를 위한 데이터가 저장되어 있는 곳 ( 변화에 민감한 정보, 금융 ) DW 서버 : 대용량 데이터가 저장되어 있는 곳 ( 우리나라 전 국민의 모든 의료 기록 ) 10년 정보, 20년 정보가 저장되어 있음 OLTP 서버 -> nested loop 조인을 주로 사용 [해쉬 조인, 병렬 처리하면 큰일난다! 왜? 메모리를 잡아먹어서 다른 사람들에게 피해를 준다] DW 서버 -> 해쉬 조인, merge 조인, 데이터 분석함수를 주로 사용, 파티션 테이블, 병렬 처리 * HASH JOIN ( 해쉬 조인 ) nested loop 조인은 한 행씩 모든 행을 조인하기 때문에작은 데이터에서는 효과적이지만, 데이터의 양이 커지면 성능이 아주 안 좋아진다. 데이터의 양이 클 때는 nested..