首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个左连接优化MySQL查询

问使用多个左连接优化MySQL查询
EN

Stack Overflow用户
提问于 2011-10-12 13:34:45
回答 2查看 10.1K关注 0票数 11

我有一个NewsStories表,我把它和一些相关的表连接在一起。每个News故事可以有多个图像、类别和地址。因此,查询实质上是:

代码语言:javascript
复制
SELECT * FROM NewStories 

LEFT JOIN Images ON Newstories.id=Images.story_id

LEFT JOIN Categories ON NewsStories.id=Categories.story_id

LEFT JOIN Addresses ON NewsStories.id=Addresses.story_id

WHERE ...

通常每个故事有几个图像和地址,以及1到2个类别。NewsStories表大约有10,000篇文章。

问题是性能相当慢(在15-20秒的数量级,尽管它确实变化很大,有时会下降到5秒)。

我想知道是否有更好的方法来组织查询以加快速度(我对SQL还很陌生)。

特别是,将给定故事的行数乘以图像数乘以地址数乘以类别数似乎是相当浪费的。

从本质上讲,我试图将新闻故事的属性重新构建为一个可以在前端操作的对象。

这里是解释(如果格式不正确,很抱歉)。我猜我没有正确地索引地址,如果它是“使用where”。对吗?

代码语言:javascript
复制
id  select_type table   type    possible_keys   key key_len ref rows    Extra

1   SIMPLE  Addresses   ALL NULL    NULL    NULL    NULL    6640    Using where

1   SIMPLE  NewsStories eq_ref  PRIMARY PRIMARY 767 NewsStories.Addresses.story_id 1    Using where

1   SIMPLE  Images  ref PRIMARY PRIMARY 767 NewsStories.NewsStories.id  1   Using index

1   SIMPLE  Categories  ref PRIMARY PRIMARY 767 NewsStories.NewStories.id   1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-12 14:02:21

  • 确保在WHERE语句和on条件中的字段上有索引,主键在缺省情况下是索引的,但您也可以在必要时手动创建索引。

CREATE UNIQUE|FULLTEXT|CREATE index_name index_type ON tbl_name (index_col_name,...)index_type

index_col_name: col_name (长度)

哈希:使用{BTREE |index_type}

  • 检查是否真的必须选择所有表中的每一列?如果不是,请确保只选择所需的列;如果确实需要左连接,请避免使用select*
  • Double检查;如果不需要左连接,请使用内连接。
  • 如果调整完查询后,性能仍然存在问题,请考虑取消规范化方案以消除连接
  • 您可能还需要考虑通过使用诸如sphinxsearch和memcached
  • Check等缓存应用程序来减少数据库的负载

没有连接是针对视图的,而不是针对实际的表

参考文献:

http://www.sphinxsearch.com

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

票数 10
EN

Stack Overflow用户

发布于 2011-10-12 13:40:42

确保您的表被正确索引。您需要为用于选择数据的每一列创建索引,否则MySQL将遍历表中的每一行。

尝试在MySQL控制台中解释查询(EXPLAIN SELECT * FROM ...etc),以了解MySQL如何在内部处理表。将结果粘贴到您的问题中以获得其他帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7735703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档