인덱스의 구조에는 B- Tree, B+ Tree, Hash, Bitmap 등 다양한 구조가 있습니다. 이번 글에서는 Bitmap 구조에 대해서 알아보도록 하겠습니다.비트맵 인덱스(Bitmap Index)인덱스 칼럼의 데이터를 Bit 값인 0 또는 1로 변환하여 인덱스 키로 사용하는 방법입니다.비트맵 인덱스의 목적은 키(Key) 값을 포함하는 행의 주소를 제공하는 것입니다.B-Tree 인덱스와 달리 카디널리터 값이 낮은 경우(특정 데이터 집합의 유니크한 값의 개수가 적은 경우. 즉, 중복도가 높은 경우)에 사용하기 좋습니다.비트 맵은 흔히 색상표를 예시로 많이 드는데, 아래와 같은 형태로 표현됩니다.분포도가 나쁜 Column에 사용하기 적합하며 성능 향상의 효과를 얻을 수 있습니다.데이터가 Bit로 구성되..
동시성 제어(Concurrency Control)동시성 제어란?동시성 제어란 DBMS가 다수의 사용자 사이에서 동시에 작용하는 다중 트랜잭션의 상호간섭 작용에서 데이터베이스를 보호하는 것을 의미합니다. 일반적으로 동시성을 허용하면 일관성이 낮아지게 됩니다. 그래서 DBMS는 동시성을 제어할 수 있도록 LOCK 기능과 트랜잭션의 격리성 수준을 조정할 수 있는 SET TRANSACTION 명령어를 제공하고 있습니다.이러한 동시성을 제어하는 방법에는 낙관적 동시성 제어와 비관적 동시성 제어가 있습니다.낙관적 동시성 제어사용자들이 같은 데이터를 동시에 수정하지 않을 것이라고 가정.데이터를 읽은 시점에 LOCK을 걸지 않는 대신 수정 시점에 값이 변경되었는지 반드시 검사해야 합니다.비관적 동시성 제어사용자들이 같..
옵티마이저(Optimizer)란?옵티마이저는 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심입니다.컴퓨터 두뇌가 CPU라면, DBMS의 두뇌는 Optimizer입니다. 개발자가 SQL을 작성하고 실행하면 소프트웨어 실행 파일처럼 즉시 실행되는 것이 아니라 옵티마이저(Optimizer)에서 "이 쿼리문을 어떻게 실행 시키겠다" 라는 여러가지 실행 계획을 세우게 됩니다. 이렇게 실행 계획을 세운 뒤 시스템 통계정보를 활용하여 각 실행 계획의 예상 비용을 산정한 후 각 실행 계획을 비교하여 최고의 효율을 가지고 있는 실행 계획을 판별한 후 그 실행 계획에 따라 수행하게 됩니다. 옵티마이저의 종류옵티마이저는 규칙 기반 옵티마이저와 비용 기반 옵티마이저로 나뉩니다. 규칙 기..
Query Optimize Skill(Query 최적화 및 튜닝 기술)Tip 1. Use Column Names Instead of * in SELECT Statement단순히, 몇 개의 column만 조회하는 경우라면 * (Asterisk)를 사용할 필요가 없습니다. 비록 적기 편할 순 있겠지만, 쿼리를 완료하기 위해서 더 많은 시간을 필요로 합니다.일부 칼럼만 선택함으로써 결과 테이블의 크기를 줄이고, 네트워크 트래픽을 감소 시킴으로써 쿼리의 평균 속도를 높일 수 있습니다.Original: SELECT * FROM SH.Sales;Improved: SELECT s.PROD_ID FROM SH.Sales s;27% Time Reduction Tip 2. Avoid include HAVING clause..
WITHIN GROUPWITHIN GROUP은 ORACLE에서 주로 사용되는 구문으로, LISTAGG 함수를 사용할 때 함께 사용하는 것을 많이 볼 수 있습니다. WITHIN GROUP 절은 평소에 많이 사용하지 않기 때문에 조금 생소하게 느껴질 수 있습니다. WITHIN GROUP 절은 LISTAGG, RANK, DENSE_RANK 함수 등과 함께 사용할 수 있습니다.WITHIN GROUP 절과 같이 사용할 수 있는 함수LISTAGG: 그룹 내의 여러 행을 하나의 문자열로 연결합니다.RANK: 그룹 내에서 순위를 매깁니다.DENSE_RANK: RANK와 유사하지만 동일한 값에 대해 동일한 순위를 부여합니다.PERCENTILE_CONT: 연속 분포 모델을 가정하고 백분위수 값을 계산합니다.PERCENTI..
SQL에서 집합과 관련된 연산자에는 UNION, UNION ALL, INTERSECT, MINUS가 있습니다.UNION과 UNION ALL의 차이는 정렬 작업을 수행하는지에 대한 여부에 있습니다.UNION은 중복을 제거해야 하기 때문에 정렬작업을 수행하므로 성능이 저하됩니다.UNION, MINUS, INTERSECT는 전체 범위를 모두 액세스하는 정렬작업을 수행하기 때문에 부분 범위 처리가 불가능합니다.UNION - 합집합UNION은 두 테이블의 결합을 나타내며, 결합시키는 두 테이블의 중복되지 않는 값들을 반환합니다.-- 부서번호를 조회하는 UNION 예제.SELECT deptno FROM emp UNIONSELECT deptno FROM dept; DEPTNO-------- 10 ..
내장 함수내장 함수내장 함수는 DBMS에서 제공하는 기본적인 함수들로 데이터 처리 및 쿼리 작업을 수행하는데 사용됩니다.내장 함수는 크게 2가지로 나뉘어 집니다.단일 행 함수: 문자형 함수, 숫자형 함수, 날짜형 함수, 형 변환 함수, NULL 관련 함수다중 행 함수: 집계 함수, 그룹 함수, 윈도우 함수 단일 행 함수단일 행 함수에는 문자형 함수, 숫자형 함수, 날짜형 함수, 형 변환 함수, NULL 관련 함수가 있습니다.1. 문자형 함수문자형 함수는 문자 또는 문자열을 입력받아 처리하는 함수로, SELECT, WHERE, ORDER BY 절에서 사용할 수 있습니다.함수 설명LOWER(문자열)문자열을 소문자로 변환합니다.UPPER(문자열)문자열을 대문자로 변환합니다.INITCAP(문자열)문자열의 첫 ..
REDO와 UNDO에 대해 설명하기 전에 우리는 Transaction에 대해 알아야 합니다.Transaction의 ACID(원자성, 일관성, 독립성, 지속성)특성이 REDO, UNDO와 긴밀한 연관이 되어 있기 때문입니다.트랜잭션(Transaction)트랜잭션이란, 데이터베이스 관리 시스템(=DBMS)에서 상호작용하는 단위를 의미합니다.DBMS는 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)를 보장합니다.트랜잭션의 모든 연산은 반드시 한꺼번에 완료되거나 한꺼번에 취소되어야 하는 원자성(Atomicity)을 가지고 있습니다. 한꺼번에 완료가 된 경우, Commit을 통해 작업 결과를 데이터베이스에 반영합니다. 반면, 트..
- Total
- Today
- Yesterday