Index Range / Full / Unique / Skip / Fast Full / Range Descending오라클 실행계획을 보다 보면 인덱스 앞에 다양한 스캔 방식이 붙는다.INDEX RANGE SCANINDEX FULL SCANINDEX UNIQUE SCANINDEX SKIP SCANINDEX FAST FULL SCANINDEX RANGE SCAN DESCENDING이들은 서로 다른 “인덱스 확장 기능”이 아니라, 같은 B-Tree 인덱스를 상황에 따라 다르게 사용하는 접근 방식이다.즉, 실행계획에 나타나는 스캔 유형은 B-Tree 구조 + 옵티마이저 판단의 결과다.이 글에서는 각 스캔 방식이 언제, 왜 선택되는지를 구조 관점에서 설명한다. 공통 전제: 오라클 B-Tree 인덱스 구조루트 →..
오라클 성능 튜닝을 하다 보면 거의 모든 길이 인덱스로 이어진다.그리고 그 인덱스의 중심에는 B-Tree가 있다.하지만 여기서 자주 생기는 오해가 있다.“오라클은 B-Tree 구조의 DB”라는 말이다.정확히 말하면,오라클의 테이블은 기본적으로 Heap 구조오라클의 대표적인 인덱스 구조가 B-Tree 계열이다.이 글에서는B-Tree가 무엇인지왜 디스크 환경에 적합한지오라클 인덱스에서 B-Tree가 어떻게 구현되고 동작하는지를 구조 중심으로 정리한다.B-Tree란 무엇인가B-Tree는 디스크 기반 저장장치에서의 탐색 성능을 최적화하기 위해 설계된 균형 트리 자료구조다.핵심 특징하나의 노드에 여러 개의 키를 저장모든 리프 노드의 깊이가 동일트리 높이가 낮아 디스크 I/O 횟수가 적음삽입/삭제 후에도 균형 유지..
쿼리 튜닝을 할 때 가장 많이 듣는 말은 “실행계획을 봐라”, “옵티마이저가 그렇게 판단한 이유가 있다”는 말이다.그런데 실행계획을 제대로 이해하려면, 그 전에 꼭 짚고 넘어가야 할 게 있다.바로 SQL 실행 과정과 옵티마이저가 언제, 어떻게 개입하는지다.이번 글에서는SQL이 내부에서 어떤 단계를 거쳐 실행되는지옵티마이저는 어느 시점에 무슨 판단을 하는지를 내부 구조 관점에서 정리해보려고 한다.SQL 실행 전체 흐름 한 번에 보기SQL 하나가 실행될 때, 오라클은 아래와 같은 흐름을 따른다. SQL 입력 → Parse → Execute → Fetch 딱 세 단계처럼 보이지만, 실제로는 Parse 단계가 가장 중요하고,옵티마이저는 이 단계에서 모든 결정을 끝낸다.Parse 단계 (SQL의 운명이 결정되는 ..
오라클 내부 구조에 대해 알아보자. 오라클 SQLP를 공부하다 보면 버퍼 캐시, redo, undo, 익스텐트, 세그먼트 같은 용어가 계속 나온다.그런데 막상 보면 “이게 다 어디에 있고, 어떻게 연결돼서 돌아가는지” 한 번에 그려지지는 않는다.그래서 이번 글에서는 오라클 내부 구조를 그림으로 먼저 잡고, 그 다음에 개념을 하나씩 연결해보려고 한다.전체 구조먼저 전체 구조부터 그려보자. 오라클은 크게 두 덩어리로 나뉜다.Instance(인스턴스)와 Database(데이터베이스)다.이걸 그림으로 그리면 대충 이런 느낌이다.[ Client Session ] | v+-----------------------------+| Oracle Instance || ..
SQL 파싱과 최적화구조적, 집합적, 선언적 질의 언어※ SQL(Structured Query Language), 그리고 옵티마이저(Optimizer)SQL은 기본적으로 구조적(structured)이고 집합적(set-based)이고 선언적(declarative)인 질의 언어다. 원하는 결과집합을 구조적, 집합적으로 선언하지만, 그 결과집합을 만드는 과정은 절차적일 수 밖에 없다. 즉, 프로시저가 필요한데, 그런 프로시저를 만들어 내는 DBMS 내부 엔진이 바로 SQL 옵티마이저다. 옵티마이저가 프로그래밍을 대신 해주는 셈이다.※ SQL 최적화란? DBMS 내부에서 프로시저를 작성하고 컴파일해서 실행 가능한 상태로 만드는 전 과정SQL 최적화SQL을 실행하기 전 최적화 과정을 세분화 한다면 아래와 같다.S..
JDBC JDBC란? Java Database Connectivity, 자바 프로그래밍 언어를 사용해 데이터베이스에 접근할 수 있도록 하는 자바 API JDBC를 이용하여 DB에 접속, SQL 실행, 데이터를 가져오거나 삭제하는 등 데이터를 다룰 수 있음 JDBC가 등장하게 된 배경 DB 접근의 표준화를 위해서 등장 JDBC 등장 이전 DB마다 존재하는 고유한 API를 직접 사용 이에 따라 개발자는 기존의 DB를 다른 DB로 교체해야하는 경우 DB에 맞게 기존의 코드도 모두 수정해야 했으며 심지어 각각의 DB를 사용하는 방법도 새로 학습해야 했음 → JDBC의 표준 인터페이스 덕분에 개발자는 DB를 쉽게 변경할 수 있게 되었고 변경에 유연하게 대처할 수 있게 됨 JDBC를 알아야 하는 이유 JDBC는 매..