我需要确切知道此查询的差异:
第一
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年代非常糟糕!
感谢您的帮助!
答案 0 :(得分:3)
LEFT JOIN
的第一个查询会为您提供cc_inscription
的所有记录,即使表cc_paiement
中没有相关记录也是如此。如果没有匹配的记录,cc_paiement
列将返回该行的NULL
。
如果cc_inscription
中有相关记录,则第二个查询只会为您提供表cc_paiement
中的记录。
您可以通过删除单词LEFT
来使第一个查询与第二个查询相同。
您可以通过创建正确的索引来优化查询。