mysql - 在 JOINING 之前选择 SELECT 会更好吗?

标签 mysql select join query-optimization left-join

我需要连接 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/

相关文章:

MySQL LEFT Join 具有多种可能性和 Inner Join

php - 如何使用 php 更新 sql 中的图像

mysql - 属性 'Private' 不是字符串或字节数组。只能为 String 和 Byte 数组属性配置长度

php - 为什么 MySQL 以科学计数法返回一些 float ,而不返回其他 float ?

c++ - ADODB::_RecordsetPtr::GetRecordCount() 失败

mysql - 这可能是一个不可能的 MySQL 查询吗?

c# - 在 LINQ 中 JOIN 之后选择所有列

mysql - 如何加入我的结果集和第三个表?

php - 加入查询以使用 codeigniter 计算行数

java - 连接 JDBC SQL 错误