까막 님이 쓰신 글 :
: 안녕하세요. 까막입니다.
:
: 청구정보를 저장하는 테이블이 있는데요.
: CustomerId, DMonth 라는 필드를 Primary Key 로 지정을 했읍니다. 오름차순이지요. -> Demand_PK
: 그리고, DMonth 필드에 따로 내림차순으로 Index 를 걸었고요. -> Demand_Idx
:
: Query 조건문에서요.
:
: WHERE CustomerId = '00041027'
: AND DMonth <= '200902'
:
: 이 조건을 줬을때, Index 를 Demand_Idx 를 사용하더군요.
: DMonth 필드에 내림차순으로 걸어둔 Index 요.
:
: 위 조건은 Demand_PK 를 사용하리라고 생각을 했는데,
: 다른 Index 를 사용해버려서 결과 도출이 많이 늦어지게 됩니다.
: Demand_Idx 를 삭제하고 실행하면 많이 빨라지고요. 건수가 많아질수록 차이가 벌어지겠죠.
:
: 다른 Query에서 Demand_Idx 를 사용하기 때문에 이 Index 를 삭제할수도 없거든요.
: 마찬 가지로 속도문제 때문에요.
:
: 강제로 사용할 Index 를 지정할 방법이 있을까요?
: SQL Server 등에서는 Index 지정이 가능한데, Firebird 는 찾아봐도 잘 모르겠더군요.
:
: 도움 부탁드립니다.
:
:
:
: 위대한 단군혼이 살아있는 나라.... 대한민국.
안녕하세요. 까막입니다.
강제 지정법을 찾았네요. 하하.
IB Expert 에서 Query 를 실행하면 Message 창에 어떤 Index 를 사용했다고 나오잖습니까?
그걸 가만히 들여다 보고 있자니... PLAN 이라는 문구가 자꾸 눈에 띄더군요.
말 그대로, 이러 이러한 Index 를 사용하겠다는 계획 아닙니까?
그래서, 그 문구 그대로 Query 문에 적용을 해봤지요. ^^
WHERE CustomerId = '00041027'
AND DMonth <= '200902'
PLAN (Demand INDEX (Demand_PK))
이렇게 해서 실행하니, 원하는 대로 Demand_PK 를 사용해서 실행을 하는군요. 하하.
지금까지 무심히 보고 넘어갔던 부분에 답이 있었음을 모르고, 생고생을 했네요. ^^;
위대한 단군혼이 살아있는 나라.... 대한민국.
|