Q&A

  • 자료 검색 속도가 엄청 느려져서.....
bde의 query 컴포턴트를 사용해서 엑세스 db의

데이타를 조회하는 프로그램을 만들고 있는데,

처음엔 로그인 창(조회버튼을 누르면 나옴) 에서 엔터를 치면

곧바로 데이타가 나왔는데,

지금은 몇분걸려서 나오거든요.

xp를 쓰고 있구요.

어떻게 해야 하는지 아시는분은 도와주세요.

그리고, 쿼리문두 좀 봐주세요


sql.add('where printdate >= ''%'+kk+'%'' and printdate <= ''%'+ll+'%''');
// kk와 ll 은 edit.text 이구요,

db 필드가 문자열로 되어 있고,  날짜와 날짜 사이의 데이타를 보려구요.

해당 일만  조회하려면
sql.add('where printdate like ' '%'+ kk+'%' ' ' );

이렇게 하니깐 나오는데, 위의 쿼리문은 내용이 없다구 나오네요

꼭 좀 부탁드립니다.



3  COMMENTS
  • Profile
    이준해 2002.05.02 23:37
    MS Access 를 사용하신다구요.
    자료의 양이 늘어날수록 다른 상용 데이터베이스보다 쉽게 속도가 저하되는게
    Access 의 단점일 겁니다.
    더군다나 님처럼, like % 등의 구문을 빈번하게 사용하면
    Index 를 사용하지 못하는 상황이 자주 발생하게 되어
    가뜩이나 느린 Access 를 더 느리게 만듭니다.

    Access 를 계속 사용해야 한다면 다음 내용을 검토해 보세요
    1. 검색조건으로 사용하는 필드에 Index 를 사용한다.
    2. 필드의 크기를 필요이상으로 잡지 않는다.(특히 문자열등)
    3. 주기적으로 압축 및 복구를 수행한다.
       - 공개된 콤포넌트중에 Access 압축을 수행하는게 있을 겁니다.
       - Torry.net 이나, DSP를 함 찾아보세요
    4. SQL 문에 like 또는 or 조건을 제한적으로 사용한다.
       - Index 를 사용하지 않는 질의는 생각보다 오래 걸립니다.

    그리고 님의 SQL 문에서 발생하는 문제는"%" 입니다.
    printdate like '200203%'  -> 20203 으로 시작하는 모든 레코드 추출
    printdate >= '200203%' and printdate <= '200204%'
      -> printdate 가 '200203%' 보다 크고 '200204%' 보다 작은 레코드 추출
      -> 당근 원하는 결과를 얻을 수 없습니다.
      -> % 를 사용하면 안되구요 '20020301' '20020430' 으로 질의를 하여야겠죠.

    도움이 되길..
    이준해
  • Profile
    major 2002.05.03 03:53

    흠 안녕하세요..
    일단 다른 문제는 앞에 분께서 아주 친절히 답변을 해주셔서 이해를 하셨을 것 같네여..
    근데..쿼리문은 약간 어려우실 것 같아서 이렇게 모자라는 실력이지만 한자 적습니다..

    예 물론 Like는 사용하지 않지만. 검색절을 좀 바꿔면 아래와 같이 하시면 될 것 같네여...

    SQL.Add('where printdate between '''+edit1.Text'' and '''+edit2.Text''' ');
    이런식으로 검색을 주시면 될거 같네여..
    글구 %는 Like에 붙는 겁니다..^^;;
    그럼 즐프하세요..

  • Profile
    김형수 2002.05.04 01:30
    많은 도움을 받았습니다.

    sql 문의 where 절에서 ' 와 " 의 차이점은 어떤건가요?

    감사합니다.