본문 바로가기

전체 글201

[Oracle] 인덱스(Index) 인덱스란? - 데이터베이스 테이블에서 데이터를 빠르게 찾기 위해 사용하는 자료구조 가반의 탐색구조 - 책에서 찾아보기와 동일한 개념 - 일반적으로 B-Tree구조가 기본 - 특정 컬럼의 값을 정렬하여 별도의 구조로 저장 - 정렬된 구조를 기반으로 "이 값이 어느 위치에 있는지" 빠르게 검색 - 조회 성능을 빠르게 하기 위한 구조이며, INSERT, DELETE, UPDATE속도는 어느정도 희생됨​인덱스의 내부동작원리1. B-Tree 인덱스 구조검색과정ex) WHERE name = 'KIM' 1. Root에서 'K'가 들어갈 범위 탐색 2. Branch에서 정렬된 값 범위 탐색 3. Leaf Node에서 'KIM'의 RowID 찾음 4. RowID로 실제 테이블 블록에 접근 -> 테이블 전체를 보지않고, .. 2025. 12. 26.
[Oracle] 통계정보(Statistics) 통계정보란? - 옵티마이저가 실행계획을 세울때 참고하는 데이터에 대한 정량적 정보(메타데이터)​주요 구성요소1. Row Count (행 수) - 테이블 전체 행(row) 수. 옵티마이저가 쿼리의 기본 규모를 판단하는 가장 기초적 통계. - 조인 방식(Nested Loop vs Hash/Sort-Merge) 결정 시 기준이 됨. - 인덱스 사용 여부 판단의 기반(작은 테이블이면 인덱스 오버헤드 때문에 풀스캔이 낫다). - 전체 예상 결과 행수(카디널리티) 계산의 시작값.ex) - 테이블 A: 100행 → 인덱스 검색 오버헤드가 상대적으로 크므로 풀스캔이 더 빠를 수 있음. - 테이블 A: 10,000,000행 → 인덱스/파티션 사용을 적극 고려.​2. Column NDV (Number of Distinct.. 2025. 12. 25.
[Oracle] 옵티마이저(Optimizer) 옵티마이저란? - 옵티마이저는 SQL을 가장 효율적으로 실행 할 수 있는 방식을 자동으로 선택하는 DBMS 내부엔진 - SQL을 어떻게 실행해야 가장 적은 비용으로 가장 빠르게 결과를 얻을 수 있는지 판단하는 두뇌역할 - SQL 자체는 절차를 말하지 않고, 어떻게 실행하는가는 옵티마이저의 몫​옵티마이저의 역할 1. 인덱스 사용여부 - 인덱스를 사용할것인지? - 여러 인덱스 중 어느 것을 선택할 것인지? - 인덱스 스캔과 풀스캔 어느것이 빠른지? 2. 어떤 조인방식을 사용할지 - Nested Loop Join - Hash Join - Sort Merge Join 3. 조인순서를 어떻게 할지 4. 파티션 프루닝 가능판단 5. 별렬 실행 사용여부 ​옵티마이저 종류 - 현재 모든 DB는 CBO(Cost Base.. 2025. 12. 24.
[Oracle] 파티션(Partition) 파티션이란? - 파티션이란 특정한 기준으로 데이터를 분할하여 저장해놓은 테이블 - 논리적인 1개의 테이블에 대해서 물리적으로 여러개의 파티션 테이블이 생성되는 것 - 오랜기간동안 쌓인 데이터를 수월하게 관리하고 성능저하를 방지하기 위한 용도로 사용 - 서로 다른 파티션에 저장함으로써 노드간의 디스크 경합을 최소화하여 성능을 향상​장점 1. 고가용성 - 파티셔은 독립적으로 관리 - 같은 테이블에서 Unavailable한 파티션은 다른 파티션에 영향을 주지않음 2. 편리한 관리 - 사용자 지정값으로 파티션이 가능 - TableSpace간 파티션 이동이 가능 3. 성능개선 - 데이터를 조회할 때 액세스하는 범위를 줄여 성능이 향상​파티션종류 1. 범위(RANGE)파티션 - 날짜나 숫자처럼 범위를 가진 데이터(.. 2025. 12. 23.