大家好,大家好
在高性能SQL查询方面,我远非专家,并且想知道任何人都可以帮助我改善下面的查询。它可以工作,但是花费的时间太长,尤其是因为我在IN()部分可以有100个左右的条目。
代码如下,希望您能找出足够的架构来提供帮助。
SELECT inv.amount
FROM invoice inv
WHERE inv.invoiceID IN (
SELECT childInvoiceID
FROM invoiceRelation ir
LEFT JOIN Payment pay ON pay.invoiceID = ir.parentInvoiceID
WHERE pay.paymentID IN ( 125886, 119293, 123497 ) )
重组查询以使用联接而不是子选择。另外,在付款表中使用INNER JOIN而不是LEFT JOIN。这是有道理的,因为您有一个WHERE过滤器,该过滤器无论如何都要在Payment表中过滤不匹配的行。
SELECT inv.amount
FROM invoice inv
INNER JOIN invoiceRelation ir ON inv.incoiceID = ir.childInvoiceID
INNER JOIN Payment pay on pay.invoiceID = ir.parentInvoiceID
WHERE pay.paymentID IN (...)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句