Php 执行Mysql查询大约需要10分钟
我有以下mysql查询来获取每张账单的总金额和税额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
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秒。实际上,它可以