2007. 7. 20. 21:03
[DB]
실행계획을 재사용하기위해 cache 에서 실행한적이 있는지 비교하기위해 다음과같은 조건으로 비교를 한다.
1.adhoc
- 대개 클라이언트 코드상에서 문자열로 쿼리문을 만들어 실행을 하거나 동적쿼리를 만들어 exec 를 이용하여 실행하는 형식이다. 이는 문자열에서 빈공간 한칸만 달라도 새로운 실행계획을 세우게 된다. (권장하지는 않는다.)
2.prepared
- sp_executesql를 동적쿼리를 실행하는 방식이다. 이는 조건절(where) 이전까지를 비교하게된다.
* 유니코드를 사용해야함(문자열앞에 N을 붙여줘야함)
예) sp_executesql N'select * from table where a=1'
3.auto parametars
- ADO의 addparametars 와 같은형식이다. 이는 파라메타값을 제외한 부분을 비교하게된다.
즉, prepared와 같은 방식으로 비교하게된다.
4.store adhoc
- 저장프로시저를(sp)를 이용하는 방식이다. 이는 저장프로시저명만 비교하여 실행계획을 재사용하게된다.(권장)
* 하지만 처음 실행계획을 세울때 잘못된 조건으로 인덱스를 사용하지 않게되면 이후 인덱스 사용이 가능한 조건이들어와도 잘못된 실행계획을 실행하게된다. 즉, 잘못된 실행계획을 재사용할 경우 AD HOC을 사용하는것보다 더 비효율적일수가 있다.
1.adhoc
- 대개 클라이언트 코드상에서 문자열로 쿼리문을 만들어 실행을 하거나 동적쿼리를 만들어 exec 를 이용하여 실행하는 형식이다. 이는 문자열에서 빈공간 한칸만 달라도 새로운 실행계획을 세우게 된다. (권장하지는 않는다.)
2.prepared
- sp_executesql를 동적쿼리를 실행하는 방식이다. 이는 조건절(where) 이전까지를 비교하게된다.
* 유니코드를 사용해야함(문자열앞에 N을 붙여줘야함)
예) sp_executesql N'select * from table where a=1'
3.auto parametars
- ADO의 addparametars 와 같은형식이다. 이는 파라메타값을 제외한 부분을 비교하게된다.
즉, prepared와 같은 방식으로 비교하게된다.
4.store adhoc
- 저장프로시저를(sp)를 이용하는 방식이다. 이는 저장프로시저명만 비교하여 실행계획을 재사용하게된다.(권장)
* 하지만 처음 실행계획을 세울때 잘못된 조건으로 인덱스를 사용하지 않게되면 이후 인덱스 사용이 가능한 조건이들어와도 잘못된 실행계획을 실행하게된다. 즉, 잘못된 실행계획을 재사용할 경우 AD HOC을 사용하는것보다 더 비효율적일수가 있다.
━━━━━━━━━━━━━━━
by 한상국(han3925)
MAIL han3925@gmail.com
han3925@hotmail.com
BLOG pointnet.tistory.com
━━━━━━━━━━━━━━━