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 65
공지 SQLGate for CUBRID 영구 무료 라이선스 제공 file admin 2020.04.09 4465
919 트리거 질문드립니다. 1 서준빠 2020.01.10 253
918 10.1 또는 10.2. 버전에서는 web manager를 지원 안 하나요? 1 hbg 2020.01.10 141
917 MAX_PREPARED_STMT_COUNT Error 문의 1 파랑조아유 2020.01.14 570
916 큐브리드 트리거 질문 드립니다. 1 speed 2020.01.14 500
915 971번 에러 로그가 5초간격으로 쌓임 3 kidless 2020.01.15 313
914 큐브리드 매니저로 접속했을때 DB 볼륨이름/볼륨유형 표시에 대해서 질문 1 file kidless 2020.01.16 214
913 함수 사용시 max, min 값 문의 4 kipo0821 2020.01.20 532
912 에러 질문 드립니다.!! 1 file 마리오네트 2020.01.22 98
911 버전에 대한 취약점 및 EOS 관련 문의 1 KSH_혁 2020.01.29 252
910 메니져 실행이 안됩니다. 1 ufox 2020.02.01 391
909 간혈적 에러 '보호된 메모리를 읽거나 쓰려고 했습니다. 확인 부탁드리겠습니다. 1 file .net 2020.02.03 381
908 asp.net ibatis connection string is null 1 noy 2020.02.04 680
907 backupdb 문의드립니다, 1 동동 2020.02.05 175
906 9.3버전에서 10.2버전 업그레이드 방법문의 드립니다. 1 동동 2020.02.06 280
905 unique constraint violations 문의 5 guloman 2020.02.10 433
904 cubrid manager 에서 select 조회 시 검색 단위에 대해서 질문있습니다. 1 브로콜리너마저 2020.02.14 227
903 컬럼명 한글 및 csv 읽어서 연동 1 intern1910 2020.02.17 473
902 쿼리 실행시 응답이 없습니다. 1 scvjeong 2020.02.24 315
901 cenots7 php7에 cubrid연동 시 에러 질문 4 개발자nn 2020.02.26 220
900 linux에서 php pdo driver 설치시 문의 개발자nn 2020.02.27 170
Board Pagination Prev 1 ... 150 151 152 153 154 155 156 157 158 159 ... 200 Next
/ 200

Contact Cubrid

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