1) 인덱스의 필요성
2) B-트리
3) 인덱스 만드는 방법
4) 인덱스 최적화기법
B-트리는 데이터베이스와 파일 시스템에서 자주 사용되는 균형 잡힌 트리 자료 구조로, 대량의 데이터를 효율적으로 관리하고 검색,삽입,삭제 연산을 빠르게 수행할 수 있도록 설계되었다.
B트리는 최상위에 단 하나의 노드 만이 존재하는데, 이를 루트 노드라고 하고 중간노드를 브랜치 노드 최하위 노드를 리프 노드라고 한다.
B트리의 특징
인덱스의 대수확장성
대수 확장성이란 데이터 양이 커지더라도 성능 저하가 비교적 완만하게 이루어지는 것을 의미합니다. 예를 들어, B-트리 기반의 인덱스는 O(log n)의 시간 복잡도를 가지기 때문에 데이터가 2배, 10배, 100배로 커지더라도 성능이 선형적으로 감소하지 않고, 로그 형태로 증가합니다. 즉, 데이터가 매우 커져도 일정 수준의 성능을 유지할 수 있는 확장성을 보장한다.
1) MySQL
클러스터형 인덱스(Clustered Index)
MySQL에서는 InnoDB 스토리지 엔진을 사용할 때, 기본 키(Primary Key)가 자동으로 클러스터형 인덱스가 됩니다.
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
) ENGINE=InnoDB;
보조 인덱스(secondary index)
보조 인덱스(Secondary Index)는 클러스터형 인덱스 외에 추가적으로 생성되는 인덱스입니다.
CREATE INDEX index_name ON table_name (column_name);
#user 테이블의 email 칼럼에 인덱스를 생성
CREATE INDEX idx_users_email ON users (email);
1) 인덱스는 비용이다
: 인덱스는 성능을 높여주는 중요한 도구이지만, 그것을 생성하고 유지하는데 비용이 든다. 인덱스는 단순히 검색 속도를 높이는 도구가 아니라, 다음과 같은 비용을 수반한다.
2) 항상 테스팅하라
: 인덱스를 생성하거나 삭제하기 전에 테스트를 통해 실제로 성능이 개선되는지 확인해야 한다. 이는 데이터베이스 최적화의 기본 원칙 중 하나로, 인덱스가 성능에 미치는 영향을 예측만 하고 실제 테스트를 하지 않으면 예상치 못한 성능저하가 발생할 수 있다.
방법
EXPLAIN 명령어 사용
EXPLAIN SELECT * FROM users WHERE email = 'example@example.com';
3) 복합 인덱스는 같음,정렬,다중 값,카디널리티 순이다.
: 복합 인덱스는 여러 개의 컬럼을 조합한 인덱스로, 특정한 순서에 따라 쿼리 성능을 최적화할 수 있습니다. 복합 인덱스를 설계할 때는 쿼리에서 사용되는 조건의 순서를 고려해야 하며, 가장 최적화된 순서는 같음(equal),정렬(order),다중 값(multi-value), 카디널리티 이다.
같음 : =
정렬 : ORDER BY,GROUP BY
다중 값 : IN,BETWEEN
ELECT * FROM users WHERE age = 30 ORDER BY signup_date
SELECT * FROM users WHERE age = 30 AND signup_date BETWEEN '2024-01-01' AND '2024-12-31