사이트를 개발하며서 오픈 이후 느린 퀴리문장을 수정하고 있습니다.
실행계획을 기반으로 퀴리를 수정하려고 하는데 실행계획을 정확하게 볼줄 몰라서 인지. 나름대로 어렵네요. 여기 저기 실행계획 보는 부분을 참고하고 있지만 막상 제게 당면한 부분과 비교해 보면 적당한 글을 아직 찾아 보지 못했어요.
여기 저기 돌아 다니다 여기에 여러 고수님들께 한수 배우고자 글을 남깁니다.
1. 실행계획을 보면 (토드기준) 빨강색으로 table access full 이라는 부분이 있는데 이건 제가 아는 수준으로는 인덱스를 타지 않고 full scan을 한 것으로 알고 있어요. 그런데 어느때는 이와 같을때에도 속도에 물리를 주지 않고 빠르게 결과를 보여주는데 반면에 다른때에는 주로 뒷 번호쪽으로 그려질때면 속도가 느려 지고 있네요.
2. order by 구문을 쓰면 속도가 느려집니다. 늘 그런것은 아니지만 여러 테이블을 join 해서 결과를 보는데 속도에도 어느정도 무리를 주지 않고 잘 나옵니다. 그런데...여기에 마지막 라인에 order by 하고 정렬을 주면 속도가 상당히 느려지고 실행계획도 뒤죽 박주 섞여 보이네요. 결과가 이와 같으니 제 추측으로는 order by 구문이 있는것이 실행계획에서 선행처리 되는 건가? 싶네요.
일전에 같은 팀원 한명과 얘기중 조인 조건중 각각에 테이블을 정렬 또는 출력데이타를 정리 해서 조인을 거는 것과 우선 조인을 걸고 나서 정렬 또는 출력데이타를 정리하는 것 중 어느것이 빠른가 얘기를 나눈적이 있는데..제 생각은 선 정리 후 조인 이라고 했고 다른 팀원은 선 조인 후 정리라고 했는데..
order by 같은 경우 여러 차례 퀴리를 실행해 보지만 선 정리 후 조인이 빠르네요.
물론 모든 경우에 반영되는 일은 아니겠으나. 어느쪽으로 퀴리를 만들어 가는것이 유리할까 궁금합니다.
그리고 마지막으로 order by 에서 인수를 한개 쓸때와 한개 이상 쓸때 속도 가 현저히 느려질때도 있는데.
튜닝을 위해서 order by절은 언제 쓰는것이 적당할까요..그리고 실행계획을 보며서 퀴리를 고쳐나갈때 어떤부분을 위주로 봐줘야 하나요..
너무 많은 내용을 질문 드립니다.