2026/06/07 4

Ch08. 데이터 무결성 - 데이터 무결성이 중요한 이유

데이터 무결성이 중요한 이유어느 날, 당신이 쇼핑몰의 월별 매출 보고서를 뽑았는데, 총매출액이 마이너스(-)로 나왔다고 상상해 보자. 황급히 원본 데이터를 살펴보니, 누군가의 실수 혹은 프로그램 버그로 인해 상품의 가격(price)에 "음수 값"이 들어가 있거나, 주문 수량(quantity)에 "-1"이 입력된 것을 발견했다. 또 다른 예로, 분명히 우리 쇼핑몰의 전체 고객은 "5명"인데, orders 테이블에는 존재하지도 않는 "user_id = 99번" 고객의 주문 기록이 남아있다. 이런 말도 안 되는 데이터, 현실 세계에서는 결코 존재할 수 없는 데이터를 우리는 "쓰레기 데이터(Garbage Data)"라고 부른다. 쓰레기 데이터가 초래하는 재앙잘못된 비즈니스 결정: 매출액이 음수로 찍힌 보고서를 ..

Ch07. 인덱스 - 복합 인덱스 정리

복합 인덱스 대원칙인덱스는 순서대로 사용하라! (왼쪽 접두어 규칙)등호(=) 조건은 앞으로, 범위 조건()은 뒤로!정렬(ORDER BY)도 인덱스 순서를 따르라! 인덱스는 순서대로 사용하라! 이는 "인덱스 왼쪽 접두어 규칙"을 의미한다. 복합 인덱스는 "(A, B, C)" 순서로 생성되었을 때, "WHERE" 절에서 A 조건 없이는 B나 C를 사용할 수 없다. 전화번호부에서 "성"을 모르고 "이름"만으로 사람을 찾을 수 없는 것과 같은 이치다.가능 (O): "WHERE A", "WHERE A AND B", "WHERE A AND B AND C"불가능 (X): "WHERE B", "WHERE C", "WHERE B AND C"이것이 복합 인덱스의 가장 기본적이고 절대적인 규칙이다.등호(=) 조건은 앞으로,..

Ch07. 인덱스 - 복합 인덱스(3)

범위 검색은 마지막에 한 번만 사용!이러한 제약 때문에 복합 인덱스를 설계할 때는 다음과 같은 순서를 따르는 것이 매우 중요하다. 등호(=) 조건을 사용하는 컬럼을 앞에, 범위 조건을 사용하는 컬럼을 뒤에 둔다. 예를 들어 아래의 쿼리가 자주 사용된다면?select * from items where category >= '패션' and price = 20000;최적의 인덱스는 순서를 변경해서 (price, category) 순서를 사용해야 한다.왜냐하면 "price = 20000"이라는 등호(=) 조건을 먼저 처리해서 검색 대상을 크게 줄일 수 있기 때문이다.(price, category) 순서의 인덱스를 추가하자create index idx_items_price_category_temp on items..

Ch07. 인덱스 - 복합 인덱스(2)

복합 인덱스 실패 예제1: 인덱스 순서 무시"카테고리와 상관없이 가격이 80,000원인 상품을 찾아보자."EXPLAIN SELECT * FROM items WHERE price = 80000;type(ALL): 풀 테이블 스캔이 발생했다.key(NULL): "idx_items_category_price" 인덱스가 있음에도 불구하고, 옵티마이저는 이 인덱스를 사용하지 않았다.왜 이런 결과가 나왔을까? 인덱스 왼쪽 접두어 규칙 때문이다. "idx_items_category_price" 인덱스는 category로 먼저 정렬되어 있다. price가 "80000"인 상품은 '전자기기' 카테고리에도 있을 수 있고, 만약 있다면 '패션' 카테고리에도 있을 수 있다. 즉, "price" 값은 인덱스 전체에 흩어져 있다..