본문 바로가기

Programming/SQL29

[MySQL] 프로그래머스 - Level 3~5 모든 문제 풀이 모음 없어진 기록 찾기 -- 1.서브쿼리 SELECT animal_id, name FROM animal_outs WHERE animal_id NOT IN (SELECT animal_id FROM animal_ins); -- 2.LEFT OUTER JOIN SELECT A.animal_id, A.name FROM animal_outs A LEFT OUTER JOIN animal_ins B ON A.animal_id = B.animal_id WHERE ins.animal_id IS NULL ORDER BY outs.animal_id; 있었는데요 없었습니다 SELECT A.animal_id, A.name FROM animal_ins A, animal_outs B WHERE A.animal_id = B.animal_.. 2021. 8. 11.
[Oracle] SQL 튜닝 - 실행계획 수립 (Execution Plan) - Rule Based Optimizer : 지정한 규칙을 기반으로 판단. 요즘은 거의 사용하지 않음 - Cost Based Optimizer : 통계정보를 기반으로 최적의 실행계획을 수립함(ML 같은 방식은 아니고 계산기와 같음). CBO가 작동할 때 어떻게 실행 계획을 수립하는지 PlusTrace로 테스트 해보자. 1. 로그인 할 사용자에게 plustrace 권한을 부여한다. 2. 아래 구문을 셋팅하면 DB server가 로그를 추적하는 것을 확인할 수 있다. SET AUTOTRACE [ON | OFF | TRACE | TRACEONLY] - ON : SQL문 실행 + 실행 계획 + 통계 정보 + 수행 결과 - OFF : 어떤 결과도 보여주지 않음 - TRACE : SQL문 실행 + 실행 계획 + 통.. 2019. 12. 27.
[Oracle] SELECT문 처리 과정 1. 구문 분석 → excution plan : 내부적으로 하루에 한번 갱신되는 통계정보를 근거로 가장 cost가 낮은 루트로 실행계획을 수립함. → shared pool에 구문을 저장 (향후 재활용) 2. 실행 → Disk I/O를 최대한 줄이기 위해 sga(system global area)내의 database buffer cash에서 먼저 뒤져보고 없으면 database로 간다. 3. 인출 → 사용자(end user, application developer...)에게 실행 결과를 반환한다. 2019. 12. 27.
[Oracle] Delete, Truncate, Drop 비교 + HWM(High Water Mark) DELETE FROM table_name; TRUNCATE TABLE table_name; DROP TABLE table_name [CASCADE CONSTRAINT]; DELETE TRUNCATE DROP 데이터 삭제 삭제 삭제 테이블 구조 존재 존재 삭제 저장 공간 존재 해제 해제 ※ TRUNCAT, DROP 하면 rollback을 할 수 없음. ※ '저장공간이 해제된다'는 것은 HWM(High Water Mark)까지 0번째 블록으로 당기는 것. 저장공간이 존재한다는 것은 HWM을 원래의 위치에 둔다는 것. 따라서 delete를 한 후에 full table scan 하면, 데이터가 없어도 hwm 지점까지 scan을 하기 때문에 시간이 오래 걸린다. ※※ HWM(High Water Mark) : 한 .. 2019. 12. 24.
[Oracle] sqlplus 치환변수 single ampersand(&), double ampersand(&&), / single ampersand(&) : where절에 들어갈 값을 입력 받아서 (java scanner, c scanf...) 쿼리를 실행 2. double ampersand(&&) : &와 같이 where절에 들어갈 값을 입력 받아서 쿼리를 실행하는데, 동일한 세션 안에서는 최초 입력받은 값을 저장해뒀다가 동일하게 실행함 (전역변수와 같은 개념) 3. / : 직전에 실행된 쿼리를 불러와 다시 실행함 2019. 12. 24.
[Oracle] view, inlineview 구조 상의 차이점 view : 이미 파싱되어 분석이 끝난 데이터이므로 권한 체크만 하고 바로 접근이 가능, data masking의 역할. 권한이 다른 각 사용자들에게 맞는 데이터를 제공하기 위해 사용한다. (단, materialized view는 물리적으로 존재하는 테이블로, 원격지에서 테이블 복제 시에 사용한다.) inlineview(from절의 서브쿼리) : 쿼리가 실행될 때마다 매번 분석을 해야함 * 어떤 원리인가? 오라클DB에서는 쿼리가 문법적으로 이상이 없다는 것이 확인되면 해시 값을 붙혀서 Library Cash에 저장해두고, 나중에 같은 쿼리가 들어왔을 때 따로 분석을 하지 않고 해시값만 호출해서 사용한다. 2019. 12. 24.
[Oracle] 쿼리로 코드를 줄여보자! GROUP BY 함수 with ROLLUP, CUBE 연산자 ROLLUP 연산자로 부서별 연봉 합계 구하기 SELECT deptno, job, sum(sal) FROM emp GROUP BY ROLLUP (deptno, job); CUBE 연산자로 직무별 연봉 합계 구하기 SELECT deptno, job, sum(sal) FROM emp GROUP BY CUBE (deptno, job); 2019. 12. 24.
[SQL] varchar, char 성능 상의 차이점 varchar 가변길이 → 실제 문자 값만 저장 char 고정길이 → 선언한 문자열 자릿수로 저장 SQL에서 문자열 데이터 타입에는 varchar, char 두 가지가 있다. DB를 설계할 때 둘 중 어떤 것을 써야할지 고민할 때가 있다. 메모리 상의 문제가 없다고 무조건 varchar를 쓰는게 맞는 것인가? Q) 실제 성능 상에서는 어떤 차이가 있을까? DB의 구조를 알아보자. DB는 Block > Extent > Segment > Table Space로 이루어져 있다. 메모리 상으로는 varchar 타입이 우수한 것을 볼 수 있다. aaa → bbbbbb로 데이터의 변경이 일어났다. char는 입력이 허용되는 길이까지만 데이터를 받지만, 가변인 varchar의 경우 Block을 추가로 생성하기 때문에.. 2019. 12. 23.
[SQL] 유용한 sqlpus 편집 명령어 A[PPEND] test C[HANGE] / old / new C[HANGE] / text / CL[EAR] BUFF[ER] DEL DEL n DEL m n I[NPUT] I[NPUT] text L[IST] L[IST] n L[IST] m n RUN n n text 2019. 12. 23.