본문 바로가기

데이터베이스

(23)
5. 함수 Rank , Dense_Rank 오라클에서 성적, 급여, 매출 등 순위를 구하기 위해서 순위 함수(RANK, DENSE_RANK)를 사용하면 된다. 순위 함수의 순위는 OVER 함수 내부의 ORDER BY 컬럼 값으로 결정된다. RANK() : 중복 순위 개수만큼 다음 순위 값을 증가 시킴 DENSE_RANK() : 중복 순위가 존재해도 순차적으로 다음 순위 값을 표시함 RANK와 DENSE_RANK 차이점은 아래 예제를 보면 쉽게 알 수 있다. SELECT ENAME , SAL , RANK() OVER (ORDER BY SAL DESC) RANK , DENSE_RANK() OVER (ORDER BY SAL DESC) DENSE_RANK FROM EMP ORDER BY SAL DESC 예제_쿼리_1(테이블포함).txt RANK() 함수..
4. 뷰 Merging 4. 뷰 Merging (1) 뷰 Merging 이란? SELECT * FROM ( SELECT * FROM EMP WHERE JOB = 'SALESMAN' ) A ,( SELECT * FROM DEPT WHERE LOC = 'CHICAGO' ) B WHERE A.DEPTNO = B.DEPTNO; 서브쿼리나 인라인 뷰처럼 쿼리를 블록화 할 시, 가독성이 더 좋기 때문에 습관적으로 사용 옵티마이저가 최적화 수행하기에는 쿼리블록을 풀어내려는 습성이 있음 (옵티마이저 개발팀이 그렇게 만들었데요..-_-;;) SELECT * FROM EMP A, DEPT B WHERE A.DEPTNO = B.DEPTNO AND A.JOB = 'SALESMAN' AND B.LOC = 'CHICAGO'; 의 쿼리 블록이 엑세스 쿼..
3. 쿼리 변환 쿼리 변환 (Query Transformation) - 쿼리 옵티마이저가 SQL을 분석해 의미적으로 동일(같은 결과를 리턴)하면서도 더 나은 성능이 기대되는 형태로 재작성 ① 휴리스틱 쿼리 변환 결과만 보장된다면 무조건 쿼리 변환 수행 (일종의 Rule-based 최적화 기법) ② 비용기반 쿼리 변환 변환된 쿼리의 비용이 더 낮을 때만 쿼리 변환 수행 서브쿼리의 분류 - 인라인 뷰 (Inline View) : from 절에 나타나는 서브쿼리 - 중첩된 서브쿼리 (Nested Subquery) : 결과집합을 한정하기 위해 where 절에 사용된 서브쿼리 * 서브쿼리가 메인쿼리에 있는 컬럼을 참조하는 형태를 '상관관계 있는 서브쿼리'라고 함 - 스칼라 서브쿼리 (Scalar Subquery) : 한 레코드당..
2. 비트맵 인덱스 Bitmap Index (비트맵 인덱스) - Key 값에 중복이 없고, Key 값 별로 하나의 비트맵 레코드를 가짐 - 비트맵 상의 각 비트가 하나의 테이블 레코드와 매핑 row#0( 8001) flag: ------, lock: 0, len=35 col 0; len 2; (4): 42 4c 55 45 → 키 값 : BLUE col 1; len 6; (6): 01 00 9f 4c 00 00 → 시작 RowID col 2; len 6; (6): 01 01 a4 03 01 47 → 종료 RowID col 3; len 15; (15): 00 c1 ae bb fa 02 c1 a1 10 c1 94 19 c2 dc 07 → 비트맵 - 시작 RowID와 종료 RowID만 갖고 있다가 테이블 액세스가 필요할 때면 각 ..
2. Index란 1. 인덱스(Index)란? [ 인덱스(index)란? ] 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 만약 우리가 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는것은 오랜 시간이 걸린다. 그렇기 때문에 책의 저자들은 책의 맨 앞 또는 맨 뒤에 색인을 추가하는데, 데이터베이스의 index는 책의 색인과 같다. 데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 돕고 있다. 인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다. 그러한 이유는 해당 연산을 수행하려..
1. 인덱스에 대한 고찰 Spring boot quartz library를 사용하여 돌리는 Batch파일에 문제가 문제가 발생하였다. 결론부터 말하자면 서비스에 대한 수정을 요구한다. 해당 서비스를 수정하며 Select Query문을 보게 되었고, Plan을 돌려본 결과 2가지 문제에 대해 생각했다. 1년이 지난 회원을 계산하여 휴면계정으로 전환하는 배치였는데, 최근접속일시를 기준으로 접속여부를 판단했다. 중요한 부분은 최근접속일시가 null인 경우가 포함이 되어있다는 것과, varchar타입으로 되어 있다보니 Date타입으로 형변환을 하다보니 Index를 타지를 못하는 경우다. 1. 기존 Query에 대한 튜닝 Index를 태우기 위해서는 컬럼에 대한 가공은 해서는 안된다. 예를 들어 SUBSTRING을 사용한다는 경우 말이다..
0. 개요