mithuna kous
mithuna kous

Reputation: 329

Struggling with long running query even for explain plan also it was taking very much time

  1. My query is taking very long time around 1hr. 2.due to this it was impacting on DB performance. 3.even for Explain plan also it was taking very long time. 4.My query is very big.

Query:

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;

Tables Structure:

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)

Please help me here.

Upvotes: 0

Views: 722

Answers (1)

Raul
Raul

Reputation: 607

Create index and change where condition. put (outer_t.medium = 'organic' or outer_t.medium is null ) after outer_t.own_domain_id = 720 and (paid.channel is null or paid.channel = 'Google') after paid.own_domain_id = 720. Try, i hope it will make your query faster.

Upvotes: 2

Related Questions