即使对于解释计划,长时间运行的查询也在苦苦挣扎,这也花费了很多时间

时间:2013-02-01 09:56:32

标签: mysql sql performance query-performance

  1. 我的查询花了很长时间大约1小时。 2.由于这会影响数据库性能。 3.即使是解释计划也需要很长时间。 我的查询非常大。
  2. 查询:

    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 个答案:

答案 0 :(得分:2)

创建索引并更改条件。在(outer_t.medium = 'organic' or outer_t.medium is null )outer_t.own_domain_id = 720(paid.channel is null or paid.channel = 'Google')之后paid.own_domain_id = 720。试试,我希望它能让你的查询更快。