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 49
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4458
3394 restoredb 이용한 복구가 제대로 되지 않아요. 4 럭키늘보 2010.02.18 13007
3393 DB 서버 OFF 시 질문입니다. 3 이석희 2009.04.30 13003
3392 큐브리드 접속 세션 1 yoon 2010.05.17 12998
3391 에고 일일히 답변 달아주셨네요;; 1 송효진 2009.04.07 12995
3390 큐브리드 스키마 복구 및 HA 관련 문의 2 file 김인선 2012.11.01 12992
3389 SSL 혹은 SSH와 같이 암호화 커넥션을 지원하나요? 1 아장아장 2010.09.03 12990
3388 큐브리드 10 버전 리스트 분할 문의 종이 2017.01.25 12979
3387 백업파일을 이용하여 데이터베이스가 없는 다른 서버에서 복구하는 방법 질문. 1 김우람 2009.03.19 12976
3386 on duplicate key update 에 대해서.. 7 초식곰 2011.10.26 12970
3385 형변환 오류 문의 1 삽질중 2009.12.30 12969
3384 특정 테이블 복구는 ? 6 file 인경수 2010.06.03 12969
3383 메모리 산정 부탁드립니다 1 으아악 2016.08.06 12969
3382 [초보질문] cubrid service status 나오는 메시지의 의미는? 3 삽질중 2009.06.04 12962
3381 DateTime 타입의 컬럼 데이트 불러오기 2 여긴어디나는누구 2013.11.21 12955
3380 DATE 타입과 DATETIME 타입 3 ES 2010.07.28 12942
3379 저장함수 관련질문 2 hscho 2016.09.02 12939
3378 자바를 연결하려고 합니다. 3 하이에나 2009.11.09 12935
3377 쿼리브라우저 IDE 사용시 에러입니다 1 aladin2000 2016.08.25 12933
3376 mac os x에서 cubrid 설치가능? 1 인성 2011.01.05 12930
3375 create문 버그 (외래키 2개 이상 참조시 ) 4 moon 2014.08.04 12922
Board Pagination Prev 1 ... 26 27 28 29 30 31 32 33 34 35 ... 200 Next
/ 200

Contact Cubrid

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