2013-05-21 2 views
-2

나는 캠페인 추적 사이트를 만들고 있습니다. 이것은 100 개의 테이블을 가지고 있습니다. CREATE TABLE IF NOT EXISTS (표는 23 개 필드와 9 개의 색인으로 구성되어 있습니다)을 사용하여 검색 및 클릭 기록을위한 매월 새 표를 작성합니다. 제 의뢰인이 CPU를 많이 먹고 있다고 말하는이 쿼리에 대해 불평하고 있습니다. 모든 요청에 ​​대해 실행 중입니다. 그러나이 테이블이 존재하지 않으면 즉, 한 달에 한 번이 테이블을 만듭니다. 이렇게하면 CPU 사용량이 증가할까요? 그렇다면이 경우 CPU 사용량을 줄일 수있는 방법이 있습니까?mysql cpu 사용을 줄이는 방법 아래의 경우

EDIT 1 개

CREATE TABLE IF NOT EXISTS click_log_201305 (
         hit_id int(10) unsigned NOT NULL auto_increment, 
         link_id int(11) NOT NULL default '0', 
         word varchar(225) NOT NULL default '', 
         ppc_engine varchar(40) NOT NULL default 'internal', 
         ppc_commission varchar(10) default NULL, 
         gross_price decimal(5,3) NOT NULL default '0.000', 
         price decimal(5,3) NOT NULL default '0.000', 
         hit_date int(11) NOT NULL default '0', 
         hit_time int(11) NOT NULL default '0', 
         affiliate varchar(50) NOT NULL default '', 
         account varchar(50) NOT NULL default '', 
         commission varchar(10) default NULL, 
         paid_flag char(3) default NULL, 
         roi_code int(11) NOT NULL default '0', 
         roi_sale int(11) default NULL, 
         debug_info varchar(100) default NULL, 
         ip varchar(15) default NULL, 
         referer varchar(200) default NULL, 
         user_agent varchar(200) default NULL, 
              subid varchar(50) default NULL, 
              ad_id INT(11) default NULL, 
              group_id INT(11) default NULL, 
              country varchar(100) default NULL, 
         PRIMARY KEY (hit_id), 
         KEY jhcl_date(hit_date), 
         KEY jhcl_src(hit_date,ppc_engine), 
         KEY jhcl_id(hit_date,link_id), 
         KEY jhcl_acct(hit_date,account), 
         KEY jhcl_aff(hit_date,affiliate), 
         KEY jhcl_word(hit_date,word), 
              KEY jhcl_camp_id(link_id), 
              KEY jhcl_group_id(group_id), 
              KEY jhcl_ad_id(ad_id) 
        ) 
+2

"내 검색 및 클릭 로깅을 위해 매월 새 테이블을 만들고 있습니다."- 좋은 디자인이 아닙니다 ... 높은 CPU는 종종 많은 테이블 스캔을 나타내므로 적절한 색인을 만드는 것이 좋습니다. –

+1

특정 인덱스가있는 특정 쿼리와 같이 문제의 세부 정보를 제공하지 않으면이 질문에 대답 할 수 없습니다. 우리는 마음을 읽을 수 없습니다. – mvp

+0

예,하지만 색인은 무엇입니까? 개요? 검색어? –

답변

0

놓고 cron 작업/예약 된 작업에 CREATE TABLE IF NOT EXISTS하고는 오전 12시 매일 실행합니다. 그런 다음 쿼리는 하루에 한 번만 실행됩니다. 그리고 새 테이블을 만들 때 별도의 테이블에 추가합니다 (예 : table_list). 여기서 만든 테이블의 목록을 유지할 수 있습니다.

그런 다음 table_list를 먼저 확인하여 현재 달에 대한 테이블을 만들 었는지 확인하십시오. "table_list"에서 테이블을 찾을 수 없으면 새 테이블을 만들 수 있습니다.

관련 문제