提高性能的MySQL查询

R先生

大家好,大家好

在高性能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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章