我使用联接和内部查询编写查询,查询给了我正确的结果。但降低了查询的整体性能。
内部查询获取俱乐部发票中的最大invoiceId。
select sum(disp.noOfCases),inv.invoiceDate
from outwardorderinvoiceenteryregistration inv join outwarddispatchenteryregistration disp on inv.outWardDispatchEnteryRegistrationId=disp.outWardDispatchEnteryRegistrationId
join (
select max(outWardOrderInvoiceEnteryRegistrationId) as outWardOrderInvoiceEnteryRegistrationId from outwardorderinvoiceenteryregistration
group by outWardDispatchEnteryRegistrationId ) maxDateInvIdFrmMultiDispId on inv.outWardOrderInvoiceEnteryRegistrationId=maxDateInvIdFrmMultiDispId.outWardOrderInvoiceEnteryRegistrationId
where inv.status=1 and inv.dispatchEnteryRegistrationStatus=1 and invoiceDate between :fromDate and :toDate group by inv.invoiceDate
如何转换此查询以提高性能。
最佳答案
在您的子查询中缺少列outWardOrderInvoiceEnteryRegistrationId
(没有这个您的问题不应该工作)
select sum(disp.noOfCases)
,inv.invoiceDate
from outwardorderinvoiceenteryregistration inv
join outwarddispatchenteryregistration disp on inv.outWardDispatchEnteryRegistrationId=disp.outWardDispatchEnteryRegistrationId
join (
select outWardOrderInvoiceEnteryRegistrationId,
max(outWardOrderInvoiceEnteryRegistrationId) as outWardOrderInvoiceEnteryRegistrationId
from outwardorderinvoiceenteryregistration
group by outWardDispatchEnteryRegistrationId
) maxDateInvIdFrmMultiDispId on inv.outWardOrderInvoiceEnteryRegistrationId=maxDateInvIdFrmMultiDispId.outWardOrderInvoiceEnteryRegistrationId
where inv.status=1 and inv.dispatchEnteryRegistrationStatus=1
and inv.invoiceDate between :fromDate and :toDate
group by inv.invoiceDate
为了性能,请确保您有正确的索引 在表上外发订单发票输入注册
上的综合索引status, dispatchEnteryRegistrationStatus, invoiceDate, outWardDispatchEnteryRegistrationId
关于mysql - query.reduce 性能缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57107027/