Background Image

FORUM

?

단축키

Prev이전 문서

Next다음 문서

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


 select count(wr_id) as cnt from board_write where wr_category like '%10'
 select count(wr_id) as cnt from board_write where wr_category like '%1010'
                                             :
                                             :
                                             :
 select count(wr_id) as cnt from board_write where wr_category like '%10010'

 위와같은 쿼리 100개정도를 한페이지에서 포문으로 돌려 실행시 mysql 에서는 로딩속도가 2초정도 걸렸는데

  큐브리드에서는 10초정도 걸립니다. 스키마는 다음과 같습니다.

  CREATE TABLE "board_write"(
"wr_id" numeric(20,0) DEFAULT 0 NOT NULL,
"bo_id" numeric(10,0) DEFAULT 0 NOT NULL,
"wr_num" numeric(20,0) NOT NULL,
"wr_reply" character varying(40) NOT NULL,
"wr_parent" numeric(10,0) DEFAULT 0 NOT NULL,
"wr_option" character varying(200) NOT NULL,
"wr_subject" character varying(510) NOT NULL,
"wr_preview" character varying(1000),
"wr_link1" character varying(510),
"wr_link2" character varying(510),
"wr_link1_hit" integer DEFAULT 0 NOT NULL,
"wr_link2_hit" integer DEFAULT 0 NOT NULL,
"wr_trackback" character varying(510),
"wr_hit" integer DEFAULT 0 NOT NULL,
"wr_good" integer DEFAULT 0 NOT NULL,
"wr_nogood" integer DEFAULT 0 NOT NULL,
"wr_comment" numeric(10,0) DEFAULT 0,
"mb_id" character varying(40) NOT NULL,
"wr_password" character varying(100) NOT NULL,
"wr_name" character varying(510) NOT NULL,
"wr_email" character varying(510) NOT NULL,
"wr_homepage" character varying(510),
"wr_time" timestamp NOT NULL,
"wr_last" timestamp NOT NULL,
"wr_ip" character varying(60) NOT NULL,
"wr_1" character varying(510),
"wr_2" character varying(510),
"wr_3" character varying(510),
"wr_4" character varying(510),
"wr_5" character varying(510),
"wr_6" character varying(510),
"wr_7" character varying(510),
"wr_8" character varying(510),
"wr_9" character varying(510),
"wr_10" character varying(510),
"wr_category" character varying(510)
);
CREATE  INDEX "wr_num_reply_parent" ON "nb_board_write"("wr_num","wr_reply","wr_parent");
CREATE  INDEX "wr_board_id" ON "nb_board_write"("bo_id","wr_id");
CREATE  INDEX ON "nb_board_write"("wr_subject","wr_name","wr_time","wr_9","wr_category");

  데이타 건수는 10만건 정도 됩니다.

  어떻게 해야 하죠??
 
 

  • ?
    남재우 2010.03.13 22:00
    문의하신 질의는 인덱스를 사용할 수가 없으므로 성능에 차이가 있을수밖에는 없습니다. 만약 문의하신 형태의 질의가 대부분 사용된다면 데이터베이스를 사용하기에는 적합하지 않다고 보입니다. like 검색은 데이터베이스에서 지원하기는 하지만 데이터베이스 본래의 기능과는 거리가 있습니다. 기본적으로 데이터베이스는 = 검색이나 범위 검색이 적합하며, like 검색은 사전에 단어를 추출하여 사용하는 검색엔진과 잘 어울립니다. like 중 우절단(like 'abc%')은 내부적으로 between 으로 치환이 가능하나 좌절단이나 좌우절단의 경우는 처리할 방법에 없어 전체 데이터를 검색해야 하므로 성능에는 좋지 않습니다.
    CUBRID 는 인터넷 응용을 위한 처리부분에 주안점을 두고 개발/개선을 하고 있으며, 일반적으로 중소규모의 업무의 사용에 무리없이 사용할 수 있습니다.
    CUBRID 를 비롯하여 대부분의 데이터베이스에서 말씀하신 형태의 질의에 대하여 성능을 높이시려면 일단 wr_category 에 대한 재설계가 필요합니다. 검색에서 10으로 끝나는 wr_category를 찾고, 1010으로 끝나는 wr_category 를 찾는 다면, 1010으로 시작하는 wr_category, 10으로 시작하는 wr_category를 찾는 것이 데이터베이스에서는 성능을 높일 수 있는 방법입니다.
    따라서 wr_cagetory 의 값이 10으로 끝나는 것이 아니라 10으로 시작하도록 설계를 변경한다면 질의는 다음의 두가지중 하나를 사용할 수 있으며, 이 경우 모두 인덱스를 사용하게 되므로 성능 향상을 가져 올 수 있습니다. 우절단(like '10%') 의 경우 CUBRID 내부적으로 between 질의로 변경하여 수행되므로 인덱스를 사용할 수 있게 됩니다.
    select ... from ... where wr_category like '10%'
    select ... from ... where wr_category between '10' and '10z' // wr_category 가 보통 숫자로만 이루어진다고 가정

    추가적으로 CUBRID 에서는 count(*) 질의 수행시 unique 인덱스를 사용하게 되는 경우(조건이 unique 필드인 경우) 그렇지 않은 경우에 비하여 훨씬 나은 성능을 보여줍니다.
  • ?
    초보 2010.03.15 20:51
    그럼 좌절단,좌우절단 like 쿼리로는  마이에스큐엘 보다 느릴수 밖에 없다라는 건지 답변 부탁드립니다.
  • ?
    남재우 2010.03.15 20:56
    죄송합니다만 해당 기능에 대하여는 MySQL 과 직접적인 테스트를 해보지 않았습니다. 또한 테스트 환경에 따라 성능 결과가 달라질 수도 있으며, 타 데이터베이스에 대한 직접적인 성능테스트는 공식적으로 오픈하지않는 것이 업체의 불문율처럼 여겨지고 있습니다.
    앞서도 언급하였지만 데이터베이스는 정확한 검색 및 부분 검색에 주안점을 두고 있습니다. 데이터베이스의 성능이 like 검색 만으로 결정할 수 있는 부분은 아니라고 봅니다. 따라서 사용하시고자 하는 다양한 부분에 대하여 CUBRID가 만족스러운지를 종합적으로 확인하시어 좋은 결정을 하셨으면 합니다.
  • ?
    초보 2010.03.16 20:30
    우절단도 인덱스를 타지 않는거 같습니다. 어떻게 된거죠?
  • ?
    남재우 2010.03.16 21:56 Files첨부 (1)
    질의수행계획을 확인해 보시기 바랍니다. 질의 수행 계획은 매니져에서 질의 수행후 F6 키를 입력하면 질의 수행계획을 볼 수 있습니다. 아래 화면을 보시면 우절단 실행후 질의 수행 계획을 보여주고 있읍니다. 화면 아래 유형이 iscan 으로 되어 있는 것을 볼 수가 있습니다. iscan 이 인덱스를 이용하였다는 것이고 이때 사용된 인덱스가 pk_nation_code 라는 인덱스입니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 CUBRID 사용자를 위한 DBeaver 도구 출시 안내 admin 2024.04.23 51
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4458
1134 트리거 작성 도중 알 수 없는 오류가 발생했습니다. 1 코코밥 2017.11.09 342
1133 cubrid 에서 tibero로 마이그레이션을 하고 싶은데 CMT툴에서 지원이 가능한지요? 1 덴드로비움 2021.07.12 342
1132 PreparedStatement.executeBatch에서 일부 데이터의 오류 시 반환 값 문의 2 새옹지마 2023.03.18 342
1131 데이터 INSERT 문제 [ 시간당 1만건씩 INSERT 되는데 ] exception cannot communicate with the broker 에러가 발생합니다. 1 키다리 2018.04.27 341
1130 aix에 cubrid 설치 시 오류 1 김개미 2017.11.23 337
1129 많은 레코드 건수를 반복적 저장하는 방법 1 산신령 2017.12.04 334
1128 엑셀파일로 데이터넣을때 질문입니다 1 file 왜안왔어 2019.04.29 333
1127 HA 구성 했는데... PK 생성 안했을시 C-SQL 조회와 뷰브리드 매니저 조회가 다르게 나오는 현상 의도적인가요?? 1 덴드로비움 2017.10.30 333
1126 Cubrid python 연동시 한글 깨짐 해결 관련 connect 세팅 문의 1 오션나인 2021.02.22 333
1125 ERWIN Reverse Engineering 관련 문의드립니다. 5 file 초코초코초 2022.10.05 332
1124 명령어로 다른 DB 서버에 접속 및 쿼리 1 프리오 2020.11.10 331
1123 툴에서 튜닝모드로 수행했을 때 관련 1 file 잉여개발자 2018.05.16 330
1122 Mac OS 에서 Cubrid Manager 실행이 안됩니다. 1 file 엘L 2023.02.20 330
1121 안녕하세요. 큐브리드 DBA권한계정을 잊어버렸을때 찾는방법이 있을까요? 5 겸둥이k 2021.08.10 330
1120 DB코맨트 쿼리와 한글 처리 문제 질문드립니다. 1 아라아 2018.07.02 328
1119 프로시저 질문입니다. 1 닐릴리 2019.02.15 328
1118 java 저장 함수에서 2 klee 2018.12.27 327
1117 cubrid view 생성할때 1 sklee 2019.06.14 327
1116 큐브리드 HA 구성 후 재기동 절차 관련 질문입니다 1 강성현 2019.12.27 326
1115 Cubrid 점검 대상 문의 1 초코칩 2017.12.18 325
Board Pagination Prev 1 ... 139 140 141 142 143 144 145 146 147 148 ... 200 Next
/ 200

Contact Cubrid

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