Q&A

  • 레코드 갯수 조회시에..
레코드를 조회하는 중에..
시간이 너무 오래걸리는 문제에 부딪혔는데요..
원인을 찾던 중.. 이런 현상이 나타났습니다.

A Table 갯수 조회 - 420개 : 1분 01초..
B Table 갯수 조회 - 600개 : 38초..

SQL : Select Count(*) From A(or B)
or
SQL : Select Count(FieldName) From A(or B) - 이 경우도 레코드 수 많은 것이 짧은 시간 소요됨..

FieldType 중에 Blob Type이 있어서..데이터가 들어가는데요..
혹시 그것이 영향을 미치는 건지..
count 수를 셀때 무엇을 가지고 세는지..알고 싶습니다..

더불어서..
BlobType 데이터들이 많이 들어간 테이블일 경우에..
Blob 데이터의 사이즈가 큰 데이터 들이 많을수록
쿼리하는데 오랜 시간이 걸리나요??

답변 부탁드립니다..ㅠ.ㅠ
2  COMMENTS
  • Profile
    TeamB 2005.10.06 02:10

    레코드수가 420,600 인가요? 레코드수에 비해 시간이 너무 많이 걸리는군요.

    요즘엔 어떨런지 모르겟는데, 예전에(몇년쯤전에...) BLOB컬럼이 있으면 데이터질의시 시간이 넘 올래걸렸던 기억이 있습니다. 그래서 그 이후부터는 절대 BLOB컬럼을 안썼습니다. ^^

    꼭 BLOB (or Text) 컬럼이 필요하다면 테이블을 나누었습니다. a 테이블에는 일반적인 컬럼타입으로 구성하고 일련번호를 하나 두고요... b 테이블에는 a 테이블의 일련번호와 BLOB가 들어가고요. 차라리 질의를 두번하는게 속도면에서는 훨씬 이득일껍니다.

    count(*) 는 보통 db 서버에서 옵티마이즈 됩니다. (물론 db서버가 하냐 안하냐에 따르겟지만요..웬만한 RDBMS는 다 옵티마이즈를 하는것으로 알고 있습니다.)

    count(fieldname)은 index 를 탑니다.

    아무래도 BOLB때문일것 같기도 합니다. select * ~ 으로 데이터를 질의 하는데 소요되는 시간을 체크해보시죠.. 한두건 , 10~20건, 100~건 정도씩 단순 select 로 질의해보셔요..

    그리고 BLOB컬럼을 drop 한다음 테스트 해보시구요.

    (솔직히 옵티마이즈가 안되고 테이블 풀스캔을 한다고 해도...저정도의 row 수면 0.01초 안에 떨어져야겟죠..)

    그럼...행운을...

    (아 BLOB 컬럼을 drop 한다음 테스트 하시면..결과좀 올려주세요... ^^ 저도 궁금해용)

  • Profile
    바다냄 2005.10.07 01:44
    ^^ 좋은 답변 감사합니다..
    레코드 수가 작은 것의 시간이 오래 걸린 이유는 인덱스가 생성이 되지 않아서 였습니다..ㅠ.ㅠ
    BlobType이 시간이 오래 걸리긴 하죠..(근데 실제 Blob데이터를 가져오지 않을때도 영향을 미치는 지가 궁금했었습니다..헤~)
    뭐 아직도 이러 저러한 의문점이 있지만..
    좀 더 연구를 해봐야 알 것 같습니다..