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表左连接的主要内容,如果未能解决你的问题,请参考以下文章