Background Image

FORUM

조회 수 6703 추천 수 0 댓글 8
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
OS
Window 2008 64bit
CUBRID Ver.
 CUBRID 9.3 (9.3.0.0206) (64bit release build for Windows_NT) (May 14 2014 23:34:10)
CUBRID TOOL Ver.
 CUBRID 매니저 2014.03 빌드 0458  (64bit)
응용 환경(API)
java

* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------

안녕하세요.


IN 쿼리 사용중 궁금한점이 있어 문의드립니다.


table_A 테이블은 마스터 테이블에 딸린 1-N 테이블 입니다.


아래의 쿼리는 계약건에 딸린 계산서 테이블 자료중 마지막 처리건의 상태값을 조회하기 위한 쿼리입니다.



SELECT pubdate
FROM table_A
WHERE serialnum IN ('100001-T20131203-1521')



SELECT pubdate
FROM table_A
WHERE table_A IN (SELECT MAX(serialnum) FROM table_A WHERE contract_key = 7135)



첫번째 쿼리와 두번째 쿼리는 같은 데이터를 리턴하고,   serialnum  열이 인덱스를 정상적으로 타고 있습니다.


문제는 두번째 쿼리가 비용이 첫번째 쿼리보다 수백배는 많이 듭니다.


100건 정도 자료를 조회를 할 경우 기존에 MSSQL에서는 운영시에는 1초 이내에 나오던 결과값이 3초 정도 걸려서 조회가 됩니다.


잘못된 방법으로 쿼리를 사용하는것인지, 다른 조회 방법이 있는지 확인 부탁드립니다.



감사합니다.

  • ?
    이용미 2015.04.07 02:34
    안녕하세요.

    첫번째 질의와 두번째 질의가 같은 데이터를 리턴한다고 하여도, 어떠한 방법으로 결과값을 출력해 내는지에 따라 질의 수행 시 발생하는 비용에는 차이가 있습니다.

    table_A의 serialnum 컬럼에 인덱스가 생성되어 있다면, 말씀하신 두 질의 중 다른 부분은 서브쿼리의 유무 인데요.
    두번째 질의에서 사용된 서브쿼리의 조건절에 사용된 contract_key 컬럼에 인덱스가 생성되어 있는지 확인 부탁 드립니다.

    만약 인덱스가 생성되어 있다면, contract_key의 분포도는 어떠한지도 확인 부탁 드립니다.

    추가로, 위에 올려주신 내용 만으로는 정확한 성능 이슈 확인이 어렵습니다. 성능 관련 문의 시, 테이블 스키마 및 질의 수행 계획도 올려주시면 분석이 더 쉬울 것으로 보입니다. 

    감사합니다.
  • ?
    종이 2015.04.07 19:49 SECRET

    "비밀글입니다."

  • ?
    이용미 2015.04.07 20:40

    안녕하세요. 댓글 감사합니다.


    일단, 두번째 질의에 대한 질의 수행 계획을 보았을 때, 전체 비용 자체는 크지 않습니다.


    현재로서는 100건 정도의 자료를 조회하는 경우 소요된 시간이 차이가 가는 이유는, 질의 수행 시간보다는 결과값이 응용에 전달되는 시간 즉 통신 비용에 많이 소요되었을 것이라고 판단됩니다.


    위 질의를 조금 더 개선하기 위해서는 table_A의 contract_key, serialnum 컬럼에 아래와 같이 복합 인덱스를 생성하여 확인해 보는 것은 어떨까 합니다.

    CREATE INDEX I_TABLE_A_CONTRACT_KEY_SERIALNUM ON TABLE_A(CONTRACT_KEY, SERIALNUM) 

    인덱스 생성 후, 번거로우시겠지만 실행 계획을 다시 한번 올려주셨으면 합니다.


    감사합니다.

  • ?
    종이 2015.04.08 02:22 SECRET

    "비밀글입니다."

  • ?
    이용미 2015.04.08 18:42
    인덱스 삭제 후에도 같은 비용이라면 인덱스 생성 및 삭제로 인하여 통계 정보가 갱신되어 질의 수행 계획이 변경되었을 가능성이 있습니다. 혹 가능하시면 인덱스 삭제 후, 질의 수행 계획을 첨부해 주실 수 있으실런지요?

    추가로 IN 조건식의 경우, 실제 질의가 수행 될 때, OR 절로 변경되어 수행됩니다.
    그렇기 때문에 IN 조건식에 조건이 많이 들어가는 경우, 많은 수의 OR절이 수행되는 것이기 때문에 성능에 영향을 미칠 수 있습니다.

    감사합니다.
  • ?
    종이 2015.04.08 23:22 SECRET

    "비밀글입니다."

  • ?
    이용미 2015.04.08 23:50

    안녕하세요. 첨부해 주신 질의 수행 계획 감사드립니다.


    인덱스 추가 생성 전에는 인덱스를 사용하면서 sel 값이 0.00021561인 것에서 인덱스 생성 후에는 Coverd Index를 사용하며 sel 값이 0.00019305으로 줄어들었으나 비용 개선은 크게 차이가 나지 않았습니다.

    그러나 인덱스 생성으로 인하여 table_A에 대한 통계 정보가 갱신되면서 기존 많은 비용을 차지하였던 [Index Join] 부분이 기존 sel 1에서 sel 0.000142511로 비용이 개선되었고, 인덱스 제거 후에도 개선된 비용을 유지하고 있는 것으로 보입니다.


    감사합니다.


  • ?
    종이 2015.04.08 23:58

    인덱스 생성 및 쿼리 작성에 많은 도움이 되었습니다.

     

    감사합니다.


List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 2 admin 2024.04.23 1407
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 5640
2084 http://maven.cubrid.org/ repository 접속이 안 됨 1 일퍼센트 2015.04.22 5144
2083 실행이 안됩니다 1 사이다 2015.04.21 6823
2082 다국어 환경 구축 방법좀 알려주세요. 1 secret 초보개발자임 2015.04.17 9
2081 Invalid buffer position! 3 secret 카이로스 2015.04.15 13
2080 큐브리드 매니저 실행 시 무반응 3 코버스 2015.04.15 10140
2079 MS-SQL의 연결된 서버와 같은 기능은 없나요? 1 CUCUCUCU 2015.04.14 6041
2078 트랜젝션 처리에 대해 1 kkndo2 2015.04.13 8346
2077 13개 이상 AVG 혹은 SUM 사용 시 결과로 Null 값만 나옵니다. 2 oiuy 2015.04.10 7254
2076 데이터베이스 복구가 되지 않습니다. 1 CUCUCUCU 2015.04.09 7260
2075 Mac OS에서 cubrid manager 사용 문의 1 file 크림빵돌이 2015.04.09 6886
2074 Warning: Error: CAS, -10012, Invalid cursor position in ~ 6 완초 2015.04.08 6376
» IN 쿼리 사용시 질의실행계획 비용 관련 8 종이 2015.04.07 6703
2072 엑셀파일로 데이터 입력 시 오류 1 secret 로우121 2015.04.04 7
2071 네트워크 드라이브에 데이터베이스 생성하기 1 꺆끾뗚 2015.04.03 5718
2070 JDBC(MySQL) 에서 JDBC로 마이그레이션 3 file 날아라수호야 2015.04.02 6209
2069 0으로 나눌수가 없는 경우.. 처리를 위해서 디코더나 case를 사용해서 써봤는데 1 거만고양이 2015.04.01 4266
2068 자동백업시 폴더까지는 생성이 되는데 백업파일이 생성이 않됩니다. 1 secret 블랙 2015.03.30 8
2067 오라클의 LAG (위 Row 값), LEAD (아래 Row 값) 가져올수 있는 쿼리 대체할만한것이 있나요? 2 거만고양이 2015.03.29 12431
2066 CUBRID와 관련된 프로세스 관련 문의드립니다. 1 secret 질의응답요청 2015.03.28 10
2065 자동백업 문의 1 file 완초 2015.03.27 4242
Board Pagination Prev 1 ... 94 95 96 97 98 99 100 101 102 103 ... 203 Next
/ 203

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales