Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询占用太多时间,性能不佳 我的查询需要很长时间,大约1小时 这会影响数据库的性能。 即使是解释计划也需要很长时间。 请重写查询以获得最佳性能。_Mysql_Sql_Query Performance - Fatal编程技术网

Mysql 查询占用太多时间,性能不佳 我的查询需要很长时间,大约1小时 这会影响数据库的性能。 即使是解释计划也需要很长时间。 请重写查询以获得最佳性能。

Mysql 查询占用太多时间,性能不佳 我的查询需要很长时间,大约1小时 这会影响数据库的性能。 即使是解释计划也需要很长时间。 请重写查询以获得最佳性能。,mysql,sql,query-performance,Mysql,Sql,Query Performance,查询: SELECT Count(*) FROM (SELECT paid.keyword_id, paid.keyword_name, stat.orgentrances, keyword.rank1, keyword.rank_check, Sum(paid.clicks)

查询:

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; 

(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

请帮帮我。

您必须在表中添加一些索引

ALTER TABLE table_name ADD UNIQUE INDEX cate_id(field_name);
这是你的电话号码

在您的情况下,我会将索引添加到:

paid.keyword_id
con.keyword_id
stat.keyword_id
keyword.id
paid.keyword_id

因为您正在对这些字段进行联接,所以您没有指示任何索引。您将需要它们来提高性能

好的,我不明白分号后面的部分,所以我忽略它

整个查询对一个子选择进行计数*,但在子查询调用SUM中进行了一系列聚合,这是数据库不必做的工作,所以消除了这一点

您可以在进一步的子查询中进行聚合,所以请不要这样做

在主子选择中,您只是在进行计数*,您选择了不在分组依据中的字段,这是对数据库的操作,不会影响计数,所以请去掉它

这让我们有点像

select count(*)
from (select paid.keyword_id
      from `t_keyword_paid_analytics_google_ib` paid
        left join
          (select outer_t.keyword_id
           from t_keyword_conversion_ga_ib outer_t
           where ...
           group by outer_t.keyword_id  ) con
          on paid.keyword_id = con.keyword_id
        left join
          (select outer_t.keyword_id
           from t_keyword_stat_ga_ib outer_t
           where ...
           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 ...
     group by paid.keyword_id
     having paid.keyword_id is not null
    ) tempt;

此外,计数可能比选择更快,而且您似乎在寻找关键字_id并最终计数。如果你能边走边数,那会比选择更好。我不确定您是否可以将其应用于此查询,但请记住。

在此处提出具体问题,请参阅我们是否应该猜测您的查询应该做什么?如果您希望有人帮助,请至少将其正确格式化。对不起,我为我的错误道歉。请在此处帮助我。您的查询似乎进行了大量分组和求和,只是为了返回单个数字计数*。如果你只是想计算一下,不要费心做所有的计算。
select count(*)
from (select paid.keyword_id
      from `t_keyword_paid_analytics_google_ib` paid
        left join
          (select outer_t.keyword_id
           from t_keyword_conversion_ga_ib outer_t
           where ...
           group by outer_t.keyword_id  ) con
          on paid.keyword_id = con.keyword_id
        left join
          (select outer_t.keyword_id
           from t_keyword_stat_ga_ib outer_t
           where ...
           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 ...
     group by paid.keyword_id
     having paid.keyword_id is not null
    ) tempt;