단일row data를 쿼리할때 where절에 조건많으면 많을수록 성능이 좋아지나요?
1. select item1, item2, item3 from test_table where id = ???
2. select item1, item2, item3 from test_table where id = ??? and email = ???
3. select item1, item2, item3 from test_table where id = ??? and email = ??? and enabled = true
데이터수는 당연히 엄청 많다 치고
3번이 가장 빠르고 2번이 그다음 1번이 제일 느린가요??
1번이 제일 빠름
아니. 조건만가지고는 빠른걸 찾아낼수가없다 인덱스가 조건과 얼마나 부합하게 잡혀있는지를 따져봐야됨. 인덱스를 쓸수없다면 1번부터 3번까지 전부 풀테이블스캔한다. 반대로 1번부터 3번까지 인덱스를 전부쓸수있다면 모든쿼리가 인덱스 스캔을하지.
1번쿼리만 인덱스를 탄다면 1번이가장빠를것이요. 2번쿼리만 인덱스를 탄다면 2번이 가장빠를것이다
다시한번 말하지만 조건자체가 성능을 좋게해주지는않는다. 인덱스를 사용할수없다면 어차피 풀테이블스캔해서 다 가져온후 조건에안맞는거 버려야됨. 버리는거자체는 메모리IO라서 크게 영향을 주진않는데 풀테이블스캔이 디스크IO를 많이발생시켜서 성능하락. 물론 풀테이블스캔이 필요할때도 있지만 단일로우만 가져올땐 풀테이블스캔은 손해다