블로그 이미지
010-9967-0955 보미아빠

카테고리

보미아빠, 석이 (500)
밥벌이 (16)
싸이클 (1)
일상 (1)
Total
Today
Yesterday

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

공지사항

최근에 올라온 글

UNKNOWN

Specifies that the query optimizer use statistical data instead of the initial value to determine the value for a local variable during query optimization.

OPTIMIZE FOR UNKNOWN

Instructs the query optimizer to use statistical data instead of the initial values for all local variables when the query is compiled and optimized, including parameters created with forced parameterization. For more information about forced parameterization, see Forced Parameterization.

If OPTIMIZE FOR @variable_name = literal_constant and OPTIMIZE FOR UNKNOWN are used in the same query hint, the query optimizer will use the literal_constant that is specified for a specific value and UNKNOWN for the remaining variable values. The values are used only during query optimization, and not during query execution.

해석을 하자면 변수가 많고 몇개는 로컬변수로 인식하게 하고, 몇개는 특정문자로 컴파일 하게 하고 싶다면 두 힌트를 모두 기술 할 수 있다.

<query_hint > ::=
{ { HASH | ORDER } GROUP
  | { CONCAT | HASH | MERGE } UNION
  | { LOOP | MERGE | HASH } JOIN
  | FAST number_rows
  | FORCE ORDER
  | MAXDOP number_of_processors
  | OPTIMIZE FOR ( @variable_name { UNKNOWN | = literal_constant } [ , ...n ] )
  | OPTIMIZE FOR UNKNOWN
  | PARAMETERIZATION { SIMPLE | FORCED }
  | RECOMPILE
  | ROBUST PLAN
  | KEEP PLAN
  | KEEPFIXED PLAN
  | EXPAND VIEWS
  | MAXRECURSION number
  | USE PLAN N'xml_plan'| TABLE HINT ( exposed_object_name  [ , <table_hint> [ [, ]...n ] ] )<table_hint> ::=

예전에 통계 히스토그램을 쓰지 않기 위해 프로시저 안에서 변수 할당해 놓고 다시 변수로 프로시저의 입력값을 넣었다가 로컬 변수를 조건절로 사용하곤 했다.

다시 말하지만 비즈니스와 데이터를 안다면, 힌트를 반드시 명시 하는게 좋다. unknown 이라는 힌트는 조금 동적인 힌트다. 왜냐하면, 평균 density 에 따라 변하기 때문이다. 그러므로, 완벽하게 어떤 인덱스, 어떤 조인 방법, 어떤 group 방법, 어떤 sort 등등을 명시하고, 필요한 쿼리에 대해서는 keepfixed plan 을 명시하는게 좋다.

유사한 이슈 중, 비동계 통계 업데이트는 이 모든 것을 제외하고 반드시 enable 시켜두는것이 좋다.


처음에 unknown 이 나왔을때 local variable 과 같다는 BOL 설명이 없었던것 같았다. 개편 되면서 추가 되지 않았을까 생각한다. 지금은 명확하게 local variable 과 같다고 되어 있으니 편하게 쓰면 될 듯 하다.

오늘도 즐거운 하루 되세요~







'밥벌이' 카테고리의 다른 글

varchar(max) 주의사항  (9) 2010.11.26
민석이의 waitstat 모니터링  (0) 2010.11.18
부하 데이터생성  (0) 2010.11.18
Array Insert  (1) 2010.11.17
이 쿼리의 결과는 뭘까요?  (6) 2010.11.04
Posted by 보미아빠
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함