【问题标题】:mysql optimization 5 tables left joinsmysql优化5表左连接
【发布时间】: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 列设为主键,这可能会有很大帮助。我现在就试试。

标签: mysql query-optimization left-join


【解决方案1】:

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

【讨论】:

  • 我忘记将我的 id 列设为主键!感谢您将查询加速到 10 秒!
  • 使它们成为主键将自动向它们添加主索引!很高兴解决了!
猜你喜欢
  • 2012-08-05
  • 2017-04-04
  • 2018-01-29
  • 2018-10-14
  • 2011-12-31
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多