Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.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
Php MySQL替换sum(如果(xxx,1,0))_Php_Mysql_Sql_Optimization - Fatal编程技术网

Php MySQL替换sum(如果(xxx,1,0))

Php MySQL替换sum(如果(xxx,1,0)),php,mysql,sql,optimization,Php,Mysql,Sql,Optimization,您好,我需要一些帮助来优化这段代码,目前运行SQL查询需要38秒,将其作为视图加载需要23秒。 以下是背景- 当成员使用链接时重定向表记录,记录它们的去向、返回时间和状态。 Projects表管理我需要的每个项目的信息。 目前,我有第三个表,它保存每个项目的计数,每次向redirects表添加记录时都会更新该计数,但是计数可能有点不可靠。服务器每小时运行一次查询以修复/验证计数 有没有什么好方法可以不用sumifxxx,1,0来计算列数 Select projects.ID as ID,cid,

您好,我需要一些帮助来优化这段代码,目前运行SQL查询需要38秒,将其作为视图加载需要23秒。 以下是背景- 当成员使用链接时重定向表记录,记录它们的去向、返回时间和状态。 Projects表管理我需要的每个项目的信息。 目前,我有第三个表,它保存每个项目的计数,每次向redirects表添加记录时都会更新该计数,但是计数可能有点不可靠。服务器每小时运行一次查询以修复/验证计数

有没有什么好方法可以不用sumifxxx,1,0来计算列数

Select projects.ID as ID,cid,name as name,state as status,
                sum(if(status="complete",1,0)) as complete,cpc,
                cpc*ss as mmkingaku,
                cpc*sum(if(status="complete",1,0)) as total,
                sum(if(status="screenout",1,0)) as screenout,
                sum(if(status="quotafull",1,0)) as quotafull, 
                sum(if(status="short",1,0)) as short,
                sum(if(status="gate",1,0)) as gate,
                sum(if(status is null,1,0)) as empty,
                sum(if(status="complete",1,0))/(sum(if(status="complete",1,0))+sum(if(status="screenout",1,0)))*100 as IR
                from redirects,projects
                where redirects.rid=projects.rid and state<>"test" group by name order by cid desc

SQL性能通常不是由于select子句中的计算。您需要查看from和GROUPBY子句

您的表是否有适当的索引?您应该在redirects.rid、projects.rid或两者上都有索引。事实上,这些可能是复合索引,包括适当的状态和测试


GROUPBY在MySQL中可能是一个性能猪。每个表中有多少数据?

数据非常大,重定向表每月获得约20万到30万条记录,但项目仅获得约30条记录。-projects.rid是唯一索引的,redirects.rid是唯一索引的。我现在将索引state,但我在上面的代码中犯了一个错误,而不是在我的服务器上。它应该是statetest在索引后,脚本需要20秒,而不是前面提到的30秒。我猜大部分工作都在group by的文件排序中。您可以使用explain看到这一点。您似乎没有任何可以显著减小数据大小的过滤。如果这一点很重要,您可能需要创建一个汇总表,以便随时了解触发器的最新情况。在不需要额外的表的情况下,是否没有优化可以使这项工作更好?