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 55
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4461
3995 회원가입이 3명이상 안돼요.. 1 딩이 2010.07.08 7846
3994 회사 서버에 접속을 할려면 설정이 다른가요? 2 후니 2009.07.14 10577
3993 홈경로 databases.txt 질문드립니다 1 큐브리드드 2023.07.17 92
3992 홀따옴표 처리 문의 1 초보 2010.04.15 14679
3991 혼합형 데이터 정렬방법 1 큐키 2021.06.11 85
3990 혼합형 데이터 정렬 방법 1 큐키 2021.06.14 265
3989 혹시 큐브리드매니저 자동완성 끄는 기능 있나요 2 안지민 2012.09.05 6036
3988 혹시 큐브리드 매니져 기본글꼴을 고정폭으로 해주실 생각은 없으신가요... 1 안지민 2012.12.20 5768
3987 혹시 PHP5.3.0 버전에서 모듈 설치되신분 계신가요??? 4 senseplus 2009.07.13 9394
3986 혹시 MMDB 지원하나요? 1 tekkal 2009.01.31 17480
3985 호스트 추가시 발생되는 오류에 대해 문의 합니다. 1 거북이사촌 2015.01.06 5259
3984 호스트 추가 질문입니다. 7 몽유객 2010.12.21 13808
3983 호스트 추가 1 karay2k 2011.12.17 17928
3982 호스트 연결이 안됩니다. 3 file 미드소나 2013.01.01 7752
3981 호스트 연결이 안되요.(비밀번호오류) 2 양희종 2011.09.06 13919
3980 호스트 연결이 무한 로딩도네요 1 file 큐브리드사용자 2022.10.20 120
3979 호스트 연결이 되지 않습니다. 3 file Juooon 2013.07.24 9235
3978 호스트 연결 에러 3 secret PJEPJE 2016.01.28 10
3977 형변환 오류 문의 1 삽질중 2009.12.30 12969
3976 현재 큐브리드 7.1 을 사용하고 있는데요 1 헬리 2009.10.01 8770
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 200 Next
/ 200

Contact Cubrid

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