如何使用mysql减少嵌套查询时间
如何使用任何类型的连接或子查询或嵌套查询来减少此查询运行时间。如何使用mysql减少嵌套查询时间
select
`p`.`id`,
`p`.`name`,
SUM(s.quantity) as inst,
from `product` as `p`
LEFT JOIN sales as s ON s.pid=p.`id` AND s.sales_id IN (SELECT invoice.invoice_id FROM invoice WHERE invoice.ccid NOT IN (SELECT ccid FROM ticket WHERE st='1'))
where `p`.`hc` = '1'
GROUP BY `p`.`id`
order by `p`.`name` DESC
最后我得出一个解决方案&它的工作原理
select
s.pid,
SUM(s.quantity) AS squan
from invoice as i
LEFT JOIN sales as s ON s.sales_id=i.invoice_id
LEFT JOIN crt ON crt.cc_id=i.cc_id AND crt.ch='0'
WHERE
crt.ch='0'
AND
(i.cc_id!='' OR i.cc_id!='0')
GROUP BY i.invoice_id
您选择了pid,但GROUP BY为invoice_id。这可能会提供不确定的/错误的结果。 – Strawberry
对ST门票添加索引,并在CCID从销售发票和sales_id添加索引。
尝试在查询之前使用Explain子句是否在possible_keys列输出中使用创建的索引。
请解释一下你的意思。如果可能的话用示例。 –
不能使用索引 –
使用,而不是内部联接的查询和左的连接,而不是不.....这将减少查询时间,因为在查询需要太多时间 –
'从产品选择 p.id, p.name AS名称, SUM(ss.instock)作为研究所 为p LEFT JOIN(SELECT s.id,s.pid,CASE COUNT(crt.salvage_part) WHEN 1 THEN 0 ELSE s.quantity END AS instock FR OM sales as s LEFT JOIN invoice as i ON i.invoice_id = s.sales_id LEFT JOIN crt ON crt.cc_id = i.cc_id AND crt.st ='1' GROUP BY s.id)as ss ON ss。 pid = p.id 其中p.hc ='1' GROUP BY p.id order by p.name DESC' **试过这个太,但不能减少它的运行时间。** –
这个问题是无意义的显然,这个查询会产生一个语法错误。 – Strawberry