MSSQL 2000 및 2005의 페이징 기법들

  • Post author:
  • Post category:
  • Post comments:4 Comments
  • Post last modified:February 8, 2020

어제 악성 쿼리를 고치면서 MS-SQL 2000,2005 페이징 기법에 적힌 기법을 모두 비교해봤다. 내가 처음에 사용했던 방법은 Top 키워드를 이용한 페이징 기법이었다. 예전엔 RowCount 키워드를 이용한 페이징 기법을 주로 썼지만, 한동안 SQL을 손 놓고 있었더니 어떻게 짜는지 금방 떠오르지 않아 생각나는대로 짰다. 결국 그렇게 안일하게 생각하다 악성 쿼리로 지목 받게 된 것이다.

쿼리 튜닝은 그때그때 상황에 맞춰야 한다. 어느 칼럼에 인덱스가 있는지, 혹 인덱스를 추가해도 문제는 없는지, 데이터의 통계 및 분포는 어떤지 등등 고려할 점이 많다. 그래서 이 세 가지 기법 중 어느 것이 최고다라고 단정지을 수는 없지만, 적어도 문제가 된 테이블에선 세번째 기법이 가장 우수했다. MSSQL 2005에 도입된 Common Table Expression (CTE)를 이용한 방식이 적게는 0.3배에서 많게는 수백배 정도 빨랐다. 안타깝게도 해당 데이터베이스에 대한 쿼리 분석 권한이 없기 때문에 실제 실행계획은 어떤지 보고 분석하진 못했다. 데이터베이스 관리자들이 직접 분석하고 검수해주던가, 아니면 최소한의 분석 권한을 주던가 해야 할텐데, 계속 이런 식으로 해야 하는지 걱정이다. 일단은 이 방식대로 쿼리를 고쳐서 좀더 상황을 지켜봐야겠다.

부연. 쿼리를 만들어달라는 요청(또는 요구)이 가끔 있는데, 이때 반드시 고려해야 할 것이 있다. 바로 그 쿼리를 얼마나 자주 쓰는지 그 빈도부터 알아야 한다. 새벽녘에 딱 한번 도는 쿼리라면 테이블 스캔을 한들 큰 문제가 안 될 수 있다. 그에 반해 초 단위로 수행되는 쿼리라면 그 속도가 아무리 빠르더라도 문제의 소지가 있다. 이런 경우엔 메모리 데이터베이스를 도입하는 방식도 고려해볼만 하다.

Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
follow me
  • 일이든 소셜이든 잠시 숨을 고르고 멈춰서 둘러보면 산으로 가는 일이 비일비재하다.
    20 hours ago
  • 최선의 노력을 투입해 거대한 쓰레기를 내놓는다던가, 차라리 조금 더 망설이며 천천히 했으면 계곡 깊숙히 차를 쳐박기 전에 돌아나오기라도 했을텐데 문제를 제기한 배경을 이해하고 진짜 문제가 맞는지 의심해보지… https://t.co/naZX8nGkVZ
    20 hours ago
  • 세상에 똑똑한 친구가 참 많은데 현명한 친구는 또 그렇지 않단 말이지. 문제가 있으면 그 문제를 잘 분석해서 최적화하고 그럴 듯한 보고서든 실물이든 잘 만든다. 그런데 전제와 가정을 주의깊게 안 보니 실은… https://t.co/2PS5SU1mJl
    20 hours ago
Buy me a coffeeBuy me a coffee
×
Kubernetes, DevSecOps, AWS, 클라우드 보안, 클라우드 비용관리, SaaS 의 활용과 내재화 등 소프트웨어 개발 전반에 도움이 필요하다면 도움을 요청하세요. 지인이라면 가볍게 도와드리겠습니다. 전문적인 도움이 필요하다면 저의 현업에 방해가 되지 않는 선에서 협의가능합니다.
Latest Posts