2013-02-01 3 views
0
  1. 1 시간 내로 쿼리가 매우 오래 걸립니다. 2. 이로 인해 DB 성능에 영향을 미치고있었습니다. 3. Explain 계획에 대해서도 매우 오랜 시간이 걸렸습니다. 4. 내 쿼리가 매우 큽니다.

검색어 :설명 계획에 대해서도 장기 실행 쿼리로 어려움을 겪고 있습니다. 매우 많은 시간이 걸렸습니다.

select count(*) from 
(
    select paid.keyword_id, paid.keyword_name, stat.orgEntrances, 
    keyword.rank1, keyword.rank_check, 
    SUM(paid.clicks) as sumclick, 
    SUM(paid.clicks * paid.avg_position) as sumclickavgpos, 
    SUM(paid.itemRevenue) as sumitem, 
    SUM(paid.cost) as sumcost, 
    SUM(paid.transactions) as sumtrans, 
    SUM(paid.impressions) as sumimpress, 
    IF(SUM(paid.impressions) = 0, 0, 
     SUM(paid.impressions * paid.avg_position)/SUM(paid.impressions)) 
    as sumimpressavgrank, 
    con.item_revenue, con.transactions, keyword.monthly_search_volume 
    from `t_keyword_paid_analytics_google_ib` paid 
    left join 
    (
     select outer_t.keyword_id, 
     sum(outer_t.item_revenue) as item_revenue, 
     sum(outer_t.transactions) as transactions 
     from t_keyword_conversion_ga_ib outer_t 
     where outer_t.own_domain_id = 720 
     and outer_t.traffic_date >= '2012-12-01' 
     and outer_t.traffic_date <= '2012-12-31' 
     group by outer_t.keyword_id 
    ) con 
    on paid.keyword_id = con.keyword_id 
    left join 
    (
     select outer_t.keyword_id, sum(outer_t.entrances) as orgEntrances 
     from t_keyword_stat_ga_ib outer_t 
     where outer_t.own_domain_id = 720 
     and outer_t.traffic_date >= '2012-12-01' 
     and outer_t.traffic_date <= '2012-12-31' 
     and (outer_t.medium = 'organic' or outer_t.medium is null) 
     group by outer_t.keyword_id 
    ) stat 
    on paid.keyword_id = stat.keyword_id 
    left join `t_managed_keyword_ib` keyword on keyword.id = paid.keyword_id 
    where paid.own_domain_id = 720 and paid.traffic_date >= '2012-12-01' 
    and paid.traffic_date <= '2012-12-31' 
    and (paid.channel is null or paid.channel = 'Google') 
    group by paid.keyword_id having paid.keyword_id is not null 
) tempt; 

테이블 구조 :

mysql> show create table t_keyword_paid_analytics_google_ib\G 
*************************** 1. row *************************** 
Table: t_keyword_paid_analytics_google_ib 
Create Table: CREATE TABLE `t_keyword_paid_analytics_google_ib` (
`keyword_name` varchar(255) DEFAULT NULL, 
`id` int(11) NOT NULL, 
`keyword_id` int(11) NOT NULL, 
`target_url_id` int(11) DEFAULT NULL, 
`own_domain_id` int(11) NOT NULL, 
`log_date` date NOT NULL, 
`traffic_date` date NOT NULL, 
`impressions` int(11) DEFAULT NULL, 
`clicks` int(11) DEFAULT NULL, 
`entrances` int(11) DEFAULT NULL, 
`match_type` int(11) DEFAULT NULL COMMENT '1: Phrase, 2: Exact, 3:Broad 4: etc', 
`ad_group_name` varchar(200) DEFAULT NULL, 
`ad_distribution_network` varchar(500) CHARACTER SET latin1 DEFAULT NULL, 
`match_query` varchar(500) CHARACTER SET latin1 DEFAULT NULL, 
`cost` decimal(10,2) DEFAULT NULL, 
`cpm` decimal(10,2) DEFAULT NULL, 
`ctr` decimal(10,2) DEFAULT NULL COMMENT 'percent', 
`cpc` decimal(10,2) DEFAULT NULL, 
`campaign` varchar(200) CHARACTER SET latin1 DEFAULT NULL, 
`keyword_status` tinyint(4) DEFAULT NULL COMMENT '1: Active,2: Approved, 3: Disapproved, 4: Paused , 5:Pending, 6: Failed, 7:etc', 
`ad_group_status` tinyint(4) DEFAULT NULL COMMENT '1:ELIGIBLE; 2=PAUSED;3=LOW_SEARCH_VOLUME;4 =LOW_QUALITY_SCORE; 5=DISAPPROVED; 6=AD_GROUP_PAUSED; 7=etc', 
`max_cpc` decimal(10,2) DEFAULT NULL, 
`quality_score` tinyint(4) DEFAULT NULL, 
`channel` varchar(100) DEFAULT NULL, 
`first_page_cpc` decimal(10,2) DEFAULT NULL, 
`avg_position` decimal(10,2) DEFAULT NULL, 
`itemRevenue` decimal(10,2) DEFAULT NULL, 
`goal1value` decimal(10,2) DEFAULT NULL, 
`goal2value` decimal(10,2) DEFAULT NULL, 
`goal3value` decimal(10,2) DEFAULT NULL, 
`goal4value` decimal(10,2) DEFAULT NULL, 
`transactions` int(10) DEFAULT NULL, 
`goal1completions` int(10) DEFAULT NULL, 
`goal2completions` int(10) DEFAULT NULL, 
`goal3completions` int(10) DEFAULT NULL, 
`goal4completions` int(10) DEFAULT NULL 
) ENGINE=BRIGHTHOUSE DEFAULT CHARSET=utf8 
1 row in set (0.00 sec) 

mysql> show create table t_keyword_conversion_ga_ib\G 
*************************** 1. row *************************** 
Table: t_keyword_conversion_ga_ib 
Create Table: CREATE TABLE `t_keyword_conversion_ga_ib` (
`keyword_name` varchar(255) COLLATE latin1_bin DEFAULT NULL, 
`id` int(11) NOT NULL, 
`own_domain_id` int(11) DEFAULT NULL, 
`keyword_id` int(11) DEFAULT NULL, 
`traffic_date` date DEFAULT NULL, 
`targeturl_id` int(11) DEFAULT NULL, 
`entrance` int(11) DEFAULT NULL, 
`transactions` int(11) DEFAULT NULL, 
`item_revenue` decimal(9,2) DEFAULT NULL, 
`goal1completions` int(11) DEFAULT NULL, 
`goal2completions` int(11) DEFAULT NULL, 
`goal3completions` int(11) DEFAULT NULL, 
`goal4completions` int(11) DEFAULT NULL, 
`goal5completions` int(11) DEFAULT NULL, 
`goal6completions` int(11) DEFAULT NULL, 
`goal7completions` int(11) DEFAULT NULL, 
`goal8completions` int(11) DEFAULT NULL, 
`goal9completions` int(11) DEFAULT NULL, 
`goal10completions` int(11) DEFAULT NULL, 
`goal1Value` decimal(9,2) DEFAULT NULL, 
`goal2Value` decimal(9,2) DEFAULT NULL, 
`goal3Value` decimal(9,2) DEFAULT NULL, 
`goal4Value` decimal(9,2) DEFAULT NULL, 
`goal5Value` decimal(9,2) DEFAULT NULL, 
`goal6Value` decimal(9,2) DEFAULT NULL, 
`goal7Value` decimal(9,2) DEFAULT NULL, 
`goal8Value` decimal(9,2) DEFAULT NULL, 
`goal9Value` decimal(9,2) DEFAULT NULL, 
`goal10Value` decimal(9,2) DEFAULT NULL, 
`medium` varchar(255) COLLATE latin1_bin DEFAULT NULL, 
`source` varchar(255) COLLATE latin1_bin DEFAULT NULL 
) ENGINE=BRIGHTHOUSE DEFAULT CHARSET=latin1 COLLATE=latin1_bin 
1 row in set (0.00 sec) 

여기 제발 도와주세요.

+1

처음에는 SQL에서 많은 중복 계산이있는 것 같습니다. 첫 번째 하위 선택에는 주 선택에서 사용 또는 출력되지 않는 9 개의 SUMmed 값이있는 것으로 보입니다. 또한 테이블에 인덱스가없는 것으로 나타납니다. – Kickstart

+0

Brighthouse 스토리지 엔진에 대한 검사 비트이며 인덱스가 거의 지원되지 않는 것처럼 보입니다. 따라서 나는이 엔진을 사용하는 복잡한 쿼리가 빠르다고 기대하지 않습니다. – Kickstart

답변

2

색인을 생성하고 조건을 변경하십시오. outer_t.own_domain_id = 720(paid.channel is null or paid.channel = 'Google') 뒤에 paid.own_domain_id = 720 다음에 (outer_t.medium = 'organic' or outer_t.medium is null)을 넣습니다. 시도해보십시오. 쿼리가 더 빨라지기를 바랍니다.

+0

저에게 다시 쓰여진 질문을 보내주십시오. –