针对相同结果的不同查询?

时间:2014-08-06 13:53:23

标签: mysql sql

我需要确切知道此查询的差异:

第一

SELECT * FROM cc_inscription 
LEFT JOIN cc_paiement 
ON cc_paiement.inscription_id = cc_inscription.inscription_id 
WHERE cc_inscription.course_id=1 
ORDER BY cc_inscription.inscription_id ASC; 
(4107 records, 19s execution)

第二

SELECT * FROM cc_inscription, cc_paiement 
WHERE cc_paiement.inscription_id = cc_inscription.inscription_id 
AND cc_inscription.course_id=1 
ORDER BY cc_inscription.inscription_id ASC; 
(3780 records, 0.400s) 

我不明白为什么第一次拿4107记录和第二次3780 ......

我如何优化第一个查询? 19年代非常糟糕!

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

LEFT JOIN的第一个查询会为您提供cc_inscription的所有记录,即使表cc_paiement中没有相关记录也是如此。如果没有匹配的记录,cc_paiement列将返回该行的NULL

如果cc_inscription中有相关记录,则第二个查询只会为您提供表cc_paiement中的记录。

您可以通过删除单词LEFT来使第一个查询与第二个查询相同。

您可以通过创建正确的索引来优化查询。

相关问题