질의 튜닝을 할때 종종 바인딩되는 값을 모르는 상태에서 질의 플랜결과를 보고자 하는 경우가 있습니다.
주로 프로그램 소스에 preparestatement 형태로 작성된 질의 문을 발췌해서 플랜을 보려고 할 경우가 이에 해당할 것 입니다.
예를 들면 select * from participant where host_year = ?; 와 같은 질의를 수행하여 플랜을 보고자 하는 경우가 되겠죠.
이런 경우에
l CSQL 인터브리터의 옵션 중 -e 옵션을 사용하여 DB에 접속하고
l set optimization level 514(또는 513, 257, 258등 자세한 내용은 큐브리드 매뉴얼>CUBRID SQL 설명서>질의 최적화> 쿼리 실행 계획 보기 참조) 를 실행하여 질의 플랜 보기 설정을 한 후
l 질의를 수행하면 됩니다.
-e 옵션은 에러가 발생하더라도 세션을 종료하지 않고 계속 실행하라는 옵션입니다.
아래는 사용예제 입니다.
host_year 컬럼에 비교되는 값으로 상수가 아닌 '?'을 입력하여도 플랜 정보가 출력됨을 확인할 수 있습니다.
C:>csql -e demodb
CUBRID SQL Interpreter
Type `;help' for help messages.
csql> set optimization level 514
csql> ;x
Current transaction has been committed.
1 command(s) successfully processed.
csql> select * from participant where host_year = ?
csql> ;x
Join graph segments (f indicates final):
seg[0]: [0]
seg[1]: host_year[0] (f)
seg[2]: nation_code[0] (f)
seg[3]: gold[0] (f)
seg[4]: silver[0] (f)
seg[5]: bronze[0] (f)
Join graph nodes:
node[0]: participant participant(916/16) (sargs 0)
Join graph terms:
term[0]: participant.host_year= ?:0 (sel 0.2) (sarg term) (not-join eligible) (indexable host_year[0]) (loc 0)
Query plan:
iscan
class: participant node[0]
index: fk_participant_host_year term[0]
cost: fixed 2(0.0/2.0) var 4(0.5/3.0) card 183
Query stmt:
select participant.host_year, participant.nation_code, participant.gold, participant.silver, participant.bronze from participant participant where participant.host_year= ?:0
In the command from line 1,
ERROR: Too few input host variables provided.
0 command(s) successfully processed.
csql>