September 27, 2023
index 기본개념
균형잡힌 뛰어난 범용성을 인정받아 가장 많이 사용된다.
B+tree 검색 성능이 뛰어난 이유
하지만, 갱신할 때 오버헤드가 너무 크기 때문에 빈번한 갱신이 일어나지 않는 BI/DWH 용도로 사용된다.
B+tree의 장점은 범용성이다.
카디널리티
와 선택률
이다.카디널리티
선택률
1/100 = 0.01로 선택률은 1%
클러스터링 팩터(참고만)
카디널리티가 높을 것.
선택률이 낮을 것.
1억건의 데이터가 있는 Orders 테이블이 있다고 하자.
SELECT order_id, receive_date
FROM Orders;
압축조건이 있기는 하지만 레코드를 압축하지 못하는 경우
SELECT order_id, receive_date
FROM Orders
WHERE process_flag = '5';
Orders 테이블에서 process_flg의 분포가 다음과 같다고 가정해보자.
process_flag = '5'
라는 검색 조건은 존재하지만, 이 조건만으로 레코드 절반 이상이 선택된다. 선택률이 83%로 매우 높은 수치.레코드를 크게 압축할 수 있는 조건
이 있어야 한다.예를 들어 기간 검색과 같은 경우
SELECT order_id
FROM Orders
WHERE receive_date BETWEEN :start_date AND :end_date;
주문받은 점포를 검색 기준으로 입력할 경우
SELECT COUNT(*)
FROM Orders
WHERE shop_id = :sid;
점포의 규모에 따라 큰 차이가 날 것.
SELECT order_id
FROM Orders
WHERE shop_name LIKE '%대공원%';
')에만 적용할 수 있다.
SELECT *
FROM SomeTable
WHERE col_1 * 1.1 > 100;
하지만 검색 조건의 우변에 식을 사용하는 경우는 인덱스가 사용된다.
WHERE COL_1 > 100/1.1
NULL과 관련한 검색 조건에서 인덱스가 사용되지 않는 것은 일반적으로 색인 필드의 데이터에 NULL이 존재하지 않기 때문이다.
SELECT *
FROM SomeTable
WHERE col_1 IS NULL;
인덱스 내부에 존재하는 값은 어디까지나 col1이지 LENGTH(col1) 이 아니기 떄문이다.
SELECT *
FROM SomeTable
WHERE LENGTH(col_1) = 10;
SELECT *
FROM SomeTable
WHERE col_1 <> 100;
참고문헌 : DB 성능 최적화를 위한 SQL 실전 가이드 SQL 레벨업 / 미크 지음, 윤인성 옮김 / 한빛미디어