먼저 해당 테이블의 통계정보를 업데이트 해주세요...
update statistics [table_name]
왜냐면 데이타가 많이 변경(많이 insert되거나 많이 삭제되는 경우)되는
경우에는 그 통계정보가 틀릴수가 있거든요...
이런 경우에는 잘못된 인덱스를 타거나 테이블 풀스켄을 할 수 있죠....
어떤 인덱스를 타는지 확인할려면여...
set showplan, noexec on하시구요...
그 쿼리를 수행해보세요...
글면 원하는 인덱스를 타는지 확인 할 수 있어여...
만약 인덱스를 제대로 못 탄다면 테이블명뒤에 인덱스를 명시할 수도 있겠져...
select * from table_name (index index_name)
일케 주시면 인덱스 선택을 강제루 줄 수 있습니다..
두가지의 차이점은 어떤 인덱스를 선택하는 것을 디비가 할 건지 관리자가 할건지의 차이겠져.... 그 대신 인덱스는 신중하게 주셔야 함다....
수고하세여 ^^*
-- 김기택 님이 쓰신 글:
>> 안녕하세요.
>>
>> DB Migration 작업을 마치고 테스트 중에 생긴 문제입니다.
>>
>> 테이블 하나에 현재 700만건 가량 되는 테이블이 하나 있습니다.
>>
>> 데이타는 모두 옮겼고, key, index, 등 모두 다 생성을 하였습니다.
>>
>> 그런데 migration 하기 전 서버에서는 이상이 없었는데,
>>
>> 새로 migration 하고 나서 select 하는시간이 너무너무너무 오래걸립니다.
>>
>> 예를들어
>>
>> select code from table where code = '???????'
>>
>> 라는 쿼리가 있으면 code라는 인덱스도 분명히 만들었습니다.
>>
>> 그런데 만든 직후에는 select 쿼리가 금방 수행이 되는데
>>
>> 해당 테이블에 update나 insert 작업 후에는 select 수행시간이 너무너무 오래 걸래네요..
>>
>> 이런경우는 어떻게 해야하죠?
>>
>> 이런 경우에 한건 insert하는 작업도 몇시간씩 걸리고 그러네요..
>>
>> 참고로 건수가 많은 관계로 index는 한번 생성하는데 14시간 가까이 걸리네요.. 그래서 매번 재 생성할 수도 없는 노릇이고....
>> 또 index는 참고로 별도의 세그먼트에 할당해서 생성하였습니다.
>> 세그먼트 용량은 충분히 만들었고요..
>>
>>
>> 한가지만 더 질문 드릴께요..
>>
>> select code from table where ..... 과
>>
>> select code from table (index index_name) where .... 의
>>
>> 쿼리에 차이점은 어떻게 되나요...
>>
>>
>> 답변해주시면 정말 감사하겠습니다. 그럼..
|