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 sspark 2018.01.10 236
918 CentOS 7 환경에서의 CUBRID 8.4.1.32003 버전의 php 5.4.16 드라이버 빌드 1 김람지 2019.04.03 236
917 varchar와 char 데이터타입의 디스크에서의 크기 문의 1 큐브리드광 2020.07.07 236
916 이중화 관련 추가 질문 드립니다. sync 설정을 관련 질문입니다. 1 coolkkm 2018.01.11 235
915 외래키 제약사항 생성 시. 1 열쓰 2021.11.30 235
914 insert all 1 Babiyo 2020.09.22 235
913 몇가지 질문사항이 있습니다.. 3 bjosbkjx 2019.02.12 234
912 cubrid manager heap size 설정방법 문의 2 lkc0626 2019.09.19 234
911 CUBRID DB 에 대한 색인 작업시 TIMEOUT 문의드립니다. 1 비너스 2021.12.21 234
910 많은 데이터를 select를 했는데 cubrid가 꺼져버립니다. 5 테스형2 2021.09.14 234
909 큐브리드관련 질문드립니다. 1 CJH3320 2018.03.12 233
908 큐브리드 매니저에 테이블 목록이 안보입니다. 1 file 배여사남편 2019.03.08 233
907 스케줄러 관련 질문 4 늅늅 2022.08.01 233
906 Cubrid DB 서버 swap memory 사용률 관련 질의 1 오라클민 2023.04.12 233
905 큐브리드 매니저 엑셀저장 기능을 질의결과를 보지 않고 저장하는 방법은 없나요? 1 봉보로봉봉 2020.08.05 232
904 리눅스에 큐브리드 설치 관련 질문 입니다. 1 file 하인츠링게 2021.04.09 232
903 Python 3.9 버전 사용시 Cubrid 접속 불가에 대한 개선 요청 1 오션나인 2021.02.19 231
902 쉘스크립트에서 큐브리드 접속 1 susu 2022.06.09 231
901 큐브리드 DAMO(암호화)관련 버전 호환관련하여 문의드립니다. 3 초코초코초 2023.03.20 230
900 utf-8로 데이터베이스를 구성했는데 컬럼의 데이터값이 byte를 측정하려면 어떻하요? 1 덴드로비움 2020.10.07 230
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