[컴][DB] Stored Procedure 가 일반적인 SQL query 보다 빠른가?

아래에 좋은 답변이 있어서 포스트를 해놓는다.

Why execute stored procedures is faster than SQL query from a script?

일단 paramertized ad-hoc SQL query 나 Stored Procedure 나 제대로 사용한다면, 둘은 비슷한 속력을 낸다고 한다.

하지만 확실히 non-paramertized SQL query 에서는 빠를 수 있다고 한다.

여기서 얘기하는 부분은 plan cache 때문인데, Stored Procedure 같은 녀석을 다시 쓸 일이 있을 것이라고 판단되면, 이 녀석을 plan cache 에 넣어 놓고 쓰기 때문에 빠르다고 한다. 하지만 non-paramertized SQL query 에서는 새로운 query 가 계속해서 들어올 경우 이 cache 가 쓸모가 없게 되는 경우들(cache miss) 이 많이 생겨서 결국 cache 의 의미가 사라지기 때문이다.

 

Query Plan

  1. query 에 문법을 체크한다.
  2. 문법에 맞으면, 그 query에 대한 execution plan 이 있는지 plan cache 를 확인한다.
  3. plan cache 에 execution plan 이 있으면, 그 execution plan 이 다시 사용되고, query 를 수행한다.
  4. 만약에 plan 이 존재하지 않는다면, execution plan 이 새롭게 정해진다.
  5. 그리고 이 execution plan 이 plan cache 에 저장된다.
  6. 그리고 query 가 수행된다.

 

Plan Cache

plan cache 는 query plan(위에서 얘기하는 execution plan) 을 저장하는 cache 를 이야기한다. cache 의 일정 부분을 이 query plan 을 저장해 놓고, 다음에 똑같은 query 가 올 때 이 녀석을 가져다 쓰기 위한 것이다.

그렇기 때문에 Stored Procedure 같이 일정하게 정해진 routine 을 계속해서 사용하는 것이 cache hit 에 도움을 주게 되는 것이다.

 

Reference

  1. http://stackoverflow.com/questions/8559443/why-execute-stored-procedures-is-faster-than-sql-query-from-a-script
  2. http://damieng.com/blog/2009/12/13/sql-server-query-plan-cache

댓글 없음:

댓글 쓰기