쿼리가 느려서 인덱스 걸었더니 확 빨라지는 걸 경험하고 나서 든 생각인데요. 이게 이렇게 좋으면 그냥 모든 컬럼에 다 인덱스 걸어버리면 되는 거 아닌가 싶어서요. 근데 아무도 그렇게 안 하는 걸 보면 분명 단점이 있을 거 같은데 그게 뭔지 정확히 모르겠습니다.
예를 들어 이런 테이블에서요.
CREATE TABLE users (
id BIGINT PRIMARY KEY,
email VARCHAR(255),
name VARCHAR(100),
age INT,
created_at DATETIME
);
여기서 그냥 email, name, age, created_at 전부 인덱스 걸면 어떤 조회가 들어와도 다 빠를 텐데 왜 그렇게 안 하는 걸까요.
제가 어렴풋이 들은 건 insert나 update 할 때 인덱스도 같이 갱신해야 돼서 쓰기가 느려진다는 건데, 이게 실제로 얼마나 영향이 큰 건가요? 그리고 저장공간도 더 먹는다는 거 같고요.
추가로 궁금한 거요.
1. 카디널리티(값 종류)가 낮은 컬럼, 예를 들어 성별처럼 값이 두세 개밖에 없는 컬럼은 인덱스 걸어도 별 효과 없다는데 왜 그런가요?
2. 복합 인덱스(여러 컬럼 묶은 인덱스)가 있으면 개별 인덱스 여러 개보다 나은 경우가 있다던데 그건 어떤 상황인가요?
3. 인덱스 걸었는데도 안 타는 경우가 있다던데 왜 그러는지도 궁금합니다.
인덱스 설계 감 잡는 법 좀 알려주세요.