Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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 需要帮助优化一个网页上的4个繁重查询吗_Mysql_Optimization - Fatal编程技术网

Mysql 需要帮助优化一个网页上的4个繁重查询吗

Mysql 需要帮助优化一个网页上的4个繁重查询吗,mysql,optimization,Mysql,Optimization,我有在一个网页上运行的查询。我使用它们进行统计,加载时间太长 我当前的配置是什么 使用pastebin上的文字换行按钮使其更易于阅读 我有很多专门用于mysql的RAM,但仍然需要很长时间。我还为大多数列编制了索引 我只是想看看我还有什么选择 我把“show create table”和总计数(*)放进去。我将重命名所有内容并粘贴到中。我同意将来可能会有人使用它。QUERY ONE 这,我将有一个覆盖指数的基础上,您的关键要素,使引擎不必返回到原始数据。。。基于此查询和下面的查询,我会将该列置于

我有在一个网页上运行的查询。我使用它们进行统计,加载时间太长

我当前的配置是什么

使用pastebin上的文字换行按钮使其更易于阅读

我有很多专门用于mysql的RAM,但仍然需要很长时间。我还为大多数列编制了索引

我只是想看看我还有什么选择

我把“show create table”和总计数(*)放进去。我将重命名所有内容并粘贴到中。我同意将来可能会有人使用它。

QUERY ONE 这,我将有一个覆盖指数的基础上,您的关键要素,使引擎不必返回到原始数据。。。基于此查询和下面的查询,我会将该列置于主索引位置,例如

StatisticsResults -- index ( DID, ActionTypeID, DateActioned )
按年份()降序和按月份()降序的顺序与硬编码引用在列表中查找字段的操作相同

问题二 --381.812

在这个例子中,DID=28,我改为DID=28。如果列是数字的,不要让引擎在尝试将一个列转换为另一个列时感到困惑。选项1中的相同索引也适用于此处

问题三 --33.899

这个看起来有点浪费。。。您将根据统计表中的“AID”列加入到division表。为什么要进行连接,除非您实际期望除法表中没有一些无效的“AID”值?同样,将“DID”列更改为28,而不是“28”。确保分区表的索引位于联接的“AID”上。查询1中的第二个索引似乎是更好的选择

问题四 --21.403

同样,“DID”列从'28'到28

对于您的TAX_ID表,在其上也有一个覆盖索引,以便它可以处理连接 转到代理表,而不转到原始页数据

Tax_ID -- index ( tid, aid )
最后,如果您处理的是从2012年1月到2013年12月的原始列表,那么您可以通过添加WHERE子句来简化查询整个统计表的过程

   AND DateActioned >= '2012-01-01'

因此,您完全跳过了2012年之前的任何内容(我想是旧数据吧?

请将所有必要信息直接输入您的问题中。链接断开,我们希望为将来的访问者保留帖子。我在网上有我不想要的敏感数据。@Dev Ria您刚刚将其发布到网上……正确。pastebin过期。如果您希望我们帮助优化查询,则需要向我们显示表和索引定义,以及每个表的行计数。也许您的表定义不好。可能索引没有正确创建。也许你在你认为你有的专栏上没有索引。如果看不到表和索引定义,我们无法判断。我们还需要行计数,因为这会极大地影响查询优化。如果您知道如何进行
解释
或获取执行计划,请将结果也放在问题中。@DevRia,只是为了笑一下,索引和调整后的最终查询性能如何。它们从380多秒增加到了3.167秒!谢谢你的建议!!
SELECT SQL_NO_CACHE DISTINCT 
      AID, 
      COUNT(*) AS acount 
   FROM 
      db.statisticsresults
         JOIN db.division_id USING(AID)
   WHERE 
      DID = 28
   GROUP BY 
      AID
   ORDER BY 
      count(*) DESC 
   LIMIT 
      19
SELECT SQL_NO_CACHE DISTINCT 
      TID, 
      tax, 
      agent, 
      COUNT(*) AS t_count 
   FROM 
      db.statisticsresults sr
         JOIN db.tax_id USING(TID)
            JOIN db.agent_id ai ON(ai.AID = sr.AID)
   WHERE 
      DID = 28 
   GROUP BY 
      TID, 
      sr.AID 
   ORDER BY 
      COUNT(*) DESC 
   LIMIT 19
Tax_ID -- index ( tid, aid )
   AND DateActioned >= '2012-01-01'