mysql优化5表左连接

Posted

技术标签:

【中文标题】mysql优化5表左连接【英文标题】:mysql optimization 5 tables left joins 【发布时间】:2013-01-04 16:13:00 【问题描述】:

我目前有 5 张桌子:

trialSum
-------------
id    total
-------------
1     2000
2     1000
3     500

trialLand
-------------
id    total
-------------
1     1000
2     250
3     500

trialImp
-------------
id    total
-------------
2     250

trialBldg
-------------
id    total
-------------
1     1000
2     500

trial
---------------------
id    name     info
---------------------
1     xxxxx    xxxxx
2     xxxxx    xxxxx
3     xxxxx    xxxxx
4     xxxxx    xxxxx

试用表将有最多的条目,并且所有“id”字段都相互匹配。每个表将有超过 7000 个条目。我正在尝试创建一个看起来像这样的大表:

    trial
    ----------------------------------------------------------------------
    id    name     info    totalSum    totalLand    totalImp    totalBldg
    ----------------------------------------------------------------------
    1     xxxxx    xxxxx    2000        1000         0           1000
    2     xxxxx    xxxxx    1000        250          250         500
    3     xxxxx    xxxxx    500         500          0           0
    4     xxxxx    xxxxx    0           0            0           0

如果我执行一个包含 4 个左连接的大型 mysql 查询,则需要 40 多分钟才能完成。必须有一个更简单的方法。谢谢!

【问题讨论】:

听起来你没有索引。如果所有id 列都是PRIMARY 索引,则查询应该几乎是即时的。请发布您的表结构和一个长时间运行的查询示例的EXPLAIN 你能举一个创建表和插入值的sqlfiddle例子吗? 你试过EXPLAIN PLAN吗?您可能会发现它很有帮助。更多here. 我应该尝试将所有 id 列设为主键,这可能会有很大帮助。我现在就试试。 【参考方案1】:

我会说,左连接确实是一个很好的方法。您对这些 id 列有索引吗?尝试添加索引,速度应该会提高。请记住使用 EXPLAIN 来确认索引的使用是否正确。更多关于解释http://www.dbtuna.com/article.asp?id=14 .

【讨论】:

我忘记将我的 id 列设为主键!感谢您将查询加速到 10 秒! 使它们成为主键将自动向它们添加主索引!很高兴解决了!

以上是关于mysql优化5表左连接的主要内容,如果未能解决你的问题,请参考以下文章

mysql4.0中一表关联多表左连接sql写法:

MYSQL 三张表查询

MySQL优化的5个维度

Mysql语句及优化

Mysql索引及优化

MYSQL 表左连接 ON AND 和ON WHERE 的区别