我需要连接 3 个表 a、b、c,并且我知道只有最左边的表中的一行必须出现在最终结果中。
SELECT *
FROM a
LEFT JOIN b
ON a.id = b.id
LEFT JOIN c
ON c.id2 = b.id2
WHERE a.id = 12;
我提出了以下查询,因为它看起来更有效率,但两个查询的执行时间相同。这是因为第一个查询被优化了吗?我应该费心去选择更有效的(第二个)查询还是坚持使用第一个,因为它更具可读性?
SELECT *
FROM (SELECT * FROM a WHERE id=12) AS temp
LEFT JOIN b
ON temp.id = b.id
LEFT JOIN c
ON b.id2 = c.id2;
最佳答案
与优化查询一样,答案应该是:视情况而定。 答案取决于几件事,其中包括:
- 使用查询 2 而不是查询 1 实际上有性能优势吗?这可以在为这些查询创建的查询计划中看到。为两个查询创建的查询计划可以相同,但在使用索引时也可以不同。
- 它还可能取决于查询表中的行数。查询运行多长时间以及查询的使用频率。如果您开始优化每天使用一次并运行几毫秒的查询,则最好使用可读性最好的查询。
因此,唯一能够真正确定您应该使用查询 1 还是查询 2 的人是:您。在这个话题上不可能给你合理的建议。
关于mysql - 在 JOINING 之前选择 SELECT 会更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7348537/