1초도 안걸렸던 쿼리는 아마도 결과 건수가 무지 많을 듯 하고요.
결과가 많은데도 빨리 나오는 이유는 부분범위 처리 때문입니다.
전체 자료를 다 보여주는 것이 아닌 일부 자료만 우선 보여줍니다.(예 : 토드 기본값은 500건)
그리고는 사용자가 스크롤을 내리면 그때 다음 500 건을 보여줍니다.
이런식으로 전체 자료를 다 보려면 어차피 수행시간이 길 것로 예상됩니다.
데이터가 워낙 많기 때문이죠.
부분범위 처리는 최초 응답시간을 줄이려는 거구요. 전체 수행시간은 동일하다고 보면 됩니다.
원본 쿼리는 조건절이 없어 읽어낸 데이터는 곧 결과 데이터가 됩니다.
- 전체 데이터를 쭈욱 읽으면서 운반단위인 500건을 채우면 바로 응답을 하죠.
- 500 건을 읽고 500건을 채워 전송
그런데 조건을 준 경우에는 읽어낸 데이터 중 일부만 결과 데이터가 됩니다.
- 500건을 읽었는데 조건을 만족하는 데이터가 100건 뿐이라면?
- 500건을 채우기 위해 500*5=2500건을 읽어야만 응답이 가능합니다.
- 수행시간이 5배가 걸리죠.
- 만약 조건을 만족하는 데이터가 극히 드믈다면?(500건 미만)
- 전체 데이터를 모두 읽고 나서야 500건을 채우지 못한 상태로 결과를 리턴합니다.
- 부분범위 처리효가가 전혀 없는 거죠.
- 전체 스캔량 대비 필요량 비율이 너무 적어 비효율인거죠.
실행계획의 cost 나 time 외에 계획 자체가 바뀌진 않았는지도 확인해 보시구요.
쿼리 튜닝능 비효율의 제거입니다.
비효율은 여러가지 측면에서 살펴 볼 수 있습니다.
조인 쿼리를 개선해 주세요... 라고 막연하게 질문하면 답을 드릴수가 없네요.