목록데이터베이스 (12)
개발의변화

비용기반(Cost-Based) 옵티마이저(CBO) - 사용자 쿼리를 위해 후보군이 될만한 실행계획 도출 => 데이터 딕셔너리에 미리 수집해 둔 통계정보를 이용해 각 실행계획의 예상비용 산정 - 통계정보: 데이터량, 컬럼 값의 수, 컬럼 값 분포, 인덱스 높이, 클러스터링 팩터 규칙기반 옵티마이저의 우선 순위 규칙에서 규칙 1. Single row by rowid: ROWID를 통해서 테이블에서 하나의 행을 액세스 하는 방식, ROWID는 행이 포함된 데이터 파일, 블록 등의정보를 가지고 있기 때문에 다른 정보를 참조하지 않고도 바로 원하는 행을 엑세스하는 방식 규칙 4: Single row by unique or primary key: 유일 인덱스를 통해서 하나의 행을 액세스, (인덱스를 먼저 액세스 -..
조건절 1 WHERE C1 = 'B'수직적 탐색을 통해 C1 = 'B'인 첫 번째 레코드를 찾고, 'C'를 만나는 순간 스캔을 멈춘다. 루트블록 스캔과정에 C1 = 'B'인 레코드를 찾았을 때 그 직전 (C1 ='A')레코드가 가리키는 리프 블록 2로 내려간다. 왜냐하면 C1 = 'B'인 레코드가 가리키는 리프블록 3을 시작으로 조건에 맞는 데이터를 만날 수 있지만 리프블록 2에 존재할 수 있기에 시작점이 아니다. 조건절 2 WHERE C1 = 'B' AND C2 = 3C1 = 'B'에서 수직적 탐색을 타면 안되고 그 직전 리프블록 2로 내려가야 한다. 조건절 3 WHERE C1 = '..
3.1.2 클러스터링 팩터(Clustering Factor)는 '군집성 계수', 특정 컬럼을 기준으로 같은 값을 갖는 데이터가 서로 모여있는 정도 예를 들어 거주지역 = '제주'에 해당하는 고객 데이터가 물리적으로 근접해 있으면 흩어져 있을 때보다 데이터를 찾는 속도가 빠르다. 즉 CF가 좋은 인덱스를 짜야 좋은 인덱스이다. 3.13. 인덱스 손익분기점 인덱스 ROWID를 이용한 테이블 액세스는 생각보다 고비용 구조 Index Range Scan에 의한 테이블 액세스가 Table Full Scan보다 느려지는 지점 흔히 인덱스 손익분기점 Table Full Scan은 전체 1000만 건 중 한 건을 조회하든, 10만 건을 조회하든, 1000만 건 등을 다 조회하든 차이가 없다. 인덱스를 이용해 테이블을 ..
홍길동 학생을 찾는 방법은 두 가지 첫째는 홍길동 학생을 차즌ㄴ 것 둘째는 교무실에서 학생명부를 조회해 홍길동 학생이 있는 교실만 찾아가는 것 홍길동 학생이 많다면 전자가 바르고, 몇 안되면 후자가 빠르다. 인덱스는 큰 테이블에서 소량 데이터를 검색할 때 사용 온라인 트랜잭션 시스템에서는 소량 데이터를 주로 검색 -> 인덱스 튜닝이 무엇보다 중요 1. 인덱스 스캔 효율화 튜닝 학생명부에서 이름과 시력순으로 정렬 -> 홍길동에 대한 데이터 소량만 찾으면 된다. 반면에 학생명부를 시력과 이름순으로 정렬해 두면 많은 양을 스캔해야 한다. 2. 테이블 액세스 횟수를 줄이는 것 인덱스 스캔 후 테이블 레코드를 액세스 할 때 랜덤 I/O 방식 사용 학생명부를 뒤지는 과정에도 비효율이 있을 수 있지만, 학생명부에 없..

SELECT * FROM CUSTOMER WHERE LOGIN = :1 1.1 SQL Structured Query Language: 구조적, 집합적, 선언적 질의 언어 원하는 결과집합을 만드는 과정은 절차적일 수 밖에 없다. 결국 프로시저가 필요한데 , 그런 프로시저를 만드는 것은 옵티마이저이다. SQL최적화 1.SQL파싱 - 파싱 트리 생성: SQL문을 이루는 개별 구성요소를 분석해서 파싱 트리 생성 - Syntax 체크: 문법적 오류가 없는지 확인 -> 사용할 수 없는 키워드, 순서가 바르지 않거난 체크 - Semantic 체크: 의미상 오류가 없는지 확인, 예를 들어, 존재하지 않는 테이블 또는 칼럼을 사용했는지, 사용한 오브젝트에 대한 권한이 있는지 확인 2.SQL 최적화 옵티마이저: 미리 수집..

트랜잭션 DBMS가 데이터베이스를 다룰 때 사용하는 논리적인 작업단위 데이터베이스 -> 장애 발생 시 데이터 복구하는 작업 단위 데이터베이스 -> 여러 작업이 동시에 같은 데이터 다룰 떄 서로 분리하는 단위 트랜잭션은 전체가 수행되거나 또는 전혀 수행되지 않아야 한다. START TRANSACTION 1. A계좌에서 10000원 인출하는 SQL UPDATE 문 2. B계좌에서 10000원을 입금하는 SQL UPDATE 문 COMMIT 1번과 2번의 두 SQL문은 하나의 논리적인 작업의 단위가 된다 트랜잭션은 데이터베이스에 저장된 테이블을 읽어와 주기억장치 버퍼에 저장, 버퍼에 저장된 데이터를 수정한 후 최종적으로 데이터베이스에 다시 저장 실제 세부적인 과정을 보면 1. A계좌의 값을 하드디스크(데이터베이..
IFNULL SELECT IFNULL(COLUMN명, "NUll인 경우 대체 값") FROM 테이블명 # Null 처리는 IF 함수와 IS NULL조건으로도 가능함 SELECT IF(IS NULL(NAME), "No name", NAME) as NAME WITH WITH 가상테이블명 AS ( SELECT 칼럼 FROM 테이블명 WHERE 조건 ) 이거 두 개를 활용해서 SQL문제를 풀어야 했다 https://school.programmers.co.kr/learn/courses/30/lessons/157340 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ..
https://velog.io/@refindmysapporo/JAVANOJOSEKI