mysql - 左连接优化

标签 mysql optimization query-optimization left-join

我有一个类似于下面简化的数据库。我需要检索列:col8、col9、col10、col11、col12(我圈出的列

目前,我正在使用左连接来连接每个表,但这会导致查询花费很长时间(有很多记录)。分析后,最大的影响是写入 tmp 表。

我将结果限制为 24,但由于左连接,它仍在将数千条记录复制到 tmp 表。

http://oberto.co.nz/demo/assets/db2.jpeg

这是否可以优化为仍然使用 pk 连接从每个表中检索带圆圈的列?

谢谢。

最佳答案

SELECT a.col12, b1.col8, c1.col9, d1.col10, e1.col11
FROM a
INNER JOIN (SELECT b.col8, b.col2, b.col3 FROM b 
            WHERE b.col2 = a.col2 GROUP BY b.col8) b1 
        ON (b1.col2 = a.col2)
INNER JOIN (SELECT c.col9, c.col3, c.col4 FROM c 
            WHERE c.col3 = b1.col3 GROUP BY c.col9) c1 
        ON (c1.col3 = b1.col3)
INNER JOIN (SELECT d.col10, d.col4 FROM d 
            WHERE d.col4 = c1.col4 GROUP BY d.col10) d1 
        ON (d1.col4 = c1.col4)
INNER JOIN (SELECT e.col11, e.col6 FROM e 
            WHERE e.col6 = a.col6 GROUP BY e.col11) e1 
        ON (e1.col6 = a.col6)

现在您将不再有重复的行。
您可能需要尝试使用 LEFT 而不是 INNER 连接。
如果您不需要子选择,您应该消除它,因为它会减慢速度。

关于mysql - 左连接优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8164355/

相关文章:

mysql - 用户在加密数据库字段上查找

optimization - ackermann 的 gcc 转换过程

javascript - 在 Javascript 中轻松添加值数组(例如,没有循环)

mysql - mysql中多个查询的总运行时间

sql-server - 为什么这个不相关的查询这么慢?

MySQL,选择短语作为单独单词的最快方法?

mysql - 将一个表复制到另一个表但保留相同的自动递增键

sql - 使用 TYPE ='MYISAM' 恢复 mysqldump 备份

mysql - Google App Script 的 JDBC/mysql 连接字符串问题

r - 在 R 中,如何进行涉及求解微分方程的非线性最小二乘优化?