Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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查询大约需要10分钟_Php_Mysql_Sql - Fatal编程技术网

Php 执行Mysql查询大约需要10分钟

Php 执行Mysql查询大约需要10分钟,php,mysql,sql,Php,Mysql,Sql,我有以下mysql查询来获取每张账单的总金额和税额 SELECT b.bill_no , b.total_amount , b.created_at , b.id , ( SELECT sum(gst_amt) FROM bill_contents_pharmacy bc WHERE bc.bill_id = b.id) as tgst FROM bills b WHERE b.bill_type = 'phar

我有以下mysql查询来获取每张账单的总金额和税额

SELECT b.bill_no
     , b.total_amount
     , b.created_at
     , b.id
     , ( SELECT sum(gst_amt) 
        FROM bill_contents_pharmacy bc 
       WHERE bc.bill_id = b.id) as tgst 
  FROM bills b 
 WHERE b.bill_type = 'pharmacy' 
   AND cast(b.cr_at as date) >= '2017-08-01' 
   AND cast(b.cr_at as date) <= '2017-08-23' 
   AND b.is_cancelled = 0 
   AND b.is_deleted = 0 
 ORDER 
  BY b.bill_no ASC

这个查询在我的php代码中大约需要10分钟,但是当我在phpmyadmin中运行它时,它只需要3.6秒。我做错了什么?

问题似乎是子查询。尝试使用联接

SELECT b.bill_no, b.total_amount,b.created_at, b.id, sum(bc.gst_amt) as tgst 
FROM bills b LEFT JOIN bill_contents_pharmacy bc ON (bc.bill_id = b.id)
WHERE b.bill_type = 'pharmacy' AND cast(b.cr_at as date) >= '2017-08-01' 
AND cast(b.cr_at as date) <= '2017-08-23' 
AND b.is_cancelled IS FALSE AND b.is_deleted IS FALSE 
GROUP BY b.bill_no, b.total_amount, b.created_at, b.id
ORDER BY b.bill_no ASC

此外,到目前为止可能没有必要进行强制转换。

您也可以尝试此操作,您必须在账单和账单内容表上创建关系,并创建索引

SELECT b.bill_no, b.total_amount, b.created_at, b.id, sum(bc.gst_amt) as tgst
FROM bills b
JOIN bill_contents_pharmacy bc ON bc.bill_id = b.id
WHERE b.bill_type = 'pharmacy'
AND cast(b.cr_at as date) >= '2017-08-01'
AND cast(b.cr_at as date) <= '2017-08-23'
AND b.is_cancelled = 0
AND b.is_deleted = 0 
GROUP BY b.bill_no, b.total_amount, b.created_at, b.id
ORDER BY b.bill_no ASC 

这必须加快您的查询速度

很可能您没有执行完全相同的查询,或者没有使用相同的数据库。除非您发布php代码,否则我们如何判断?3.6秒也差不多。你在处理多少条记录?PHP代码一定与之有关。您确切地知道结果集是如何返回到代码中的吗?如果我的假设是正确的,并且结果集的大小与此有关,那么您可以使用PHP中的查询限制来测试这一点。例如,如果查询返回10K记录,则限制为5K,并查看返回时间是如何受到影响的。这并不能解释此查询在我的php代码中大约需要10分钟,但当我在phpmyadmin中运行它时,只需3.6秒。实际上,它可以