안녕하세요..
제가 초보라서 맨땅에 헤딩하다가 결국 질문을 올립니다..
windows 2000 에 인터베이스 5.6 을 사용하고 있습니다.
CPU PII 350MHz 램 256M 입니다.
데이터베이스 하나에 테이블은 3개 그중 DDD300이라는 테이블이 가장 큽니다.
트랜젝션수는 3분에 2~3건정도...
DDD300 이라는 테이블은 컬럼은 40개 정도 되고 3,500,000건 정도의 데이터가 들어있습니다.
인덱스는
SQL> show index DDD300;
EDDD300_1 INDEX ON DDD300(SYSTEMNO, AGF, ADDR, DATETIME, DRN)
GDDD300_1 INDEX ON DDD300(SYSTEMNO, AGF, ADDR, DRN)
RDDD300_1 INDEX ON DDD300(SYSTEMNO, AGF, ADDR, DATETIME, DRN)
이렇게 있고요... (왜 같은 컬럼의 EDDD300_1 , RDDD300_1 있는지는 저도잘.. -_-;)
SQL문은 addr을 0~159까지 하나씩 증가시키는 SQL 문을 실행합니다..
select * from ddd300 where systemno=1 and agf=4096 and addr=0 and datetime >= 37586.58895833336 and drn = 21753;
select * from ddd300 where systemno=1 and agf=4096 and addr=1 and datetime >= 37586.58895833336 and drn = 21753;
이렇게 하면 결과가 금방 나옵니다..
SQL>select * from ld300 where systemno=1 and agf=4096 and addr=1 and datetime >= 37586.58895833336 and drn = 21753;
PLAN (LD300 INDEX (REPORTLD300_1))
결과...생략.
Records affected: 1
Current memory = 9578436
Delta memory = 0
Max memory = 15067088
Elapsed time= 0.01 sec
Cpu = 0.00 sec
Buffers = 1024
Reads = 0
Writes = 0
Fetches = 31
SQL>
그런데 문제는
select * from ddd300 where systemno=1 and agf=4096 and addr=2 and datetime >= 37586.58895833336 and drn = 21753;
처럼 addr=2 로 하고 실행시키면
SQL>select * from ddd300 where systemno=1 and agf=4096 and addr=2 and datetime >= 37586.58895833336 and drn = 21753;
PLAN (LD300 INDEX (REPORTLD300_1))
결과 ..생략
Records affected: 1
Current memory = 12242892
Delta memory = 2706432
Max memory = 15067088
Elapsed time= 69.48 sec
Cpu = 2.44 sec
Buffers = 1024
Reads = 24289
Writes = 0
Fetches = 313446
처럼 실행 시간이 너무 오래걸린다는 거죠.. T.T
분명히 인덱스도 같이 타는데 왜그런지... ?
제가 잘 모르는 무언가가 있는건지요..
다른 해결방법같은건 없을까요?
그럼 감사드립니다..
|