首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何提高这个MySQL内部连接的性能?

问如何提高这个MySQL内部连接的性能?
EN

Stack Overflow用户
提问于 2014-02-18 17:55:55
回答 4查看 439关注 0票数 0

我有下面的mysql查询

代码语言:javascript
复制
SELECT p. *
FROM posts AS p
INNER JOIN followings AS f ON p.id_user = f.id_user
WHERE 
f.id_me =(my id)
ORDER BY id LIMIT 11

我有以下索引:

  • id_user表中的posts
  • id_user, id_me在followings表中。

followings表中的100 k行,posts表中的30K行。

我的问题是,它需要超过1秒,是否有可能写这个查询,需要几毫秒?

EN

回答 4

Stack Overflow用户

发布于 2014-02-18 18:00:41

代码语言:javascript
复制
SELECT p. *
FROM posts AS p
INNER JOIN (SELECT id_me, id_user from followings order by id_me, id_user) AS f ON p.id_user = f.id_user
WHERE 
f.id_me =(my id)
ORDER BY id LIMIT 11 

通过创建一个sub_query,您将索引放在ID上,而不更改表。这应该会加快时间。如果这不起作用,而且它对这个查询使用了不正确的索引,那么您可以使用force_index...but --这会有一点帮助.

票数 0
EN

Stack Overflow用户

发布于 2014-02-18 18:06:42

试试这个:

代码语言:javascript
复制
    select p. *
    from posts p
    where p.id_user in 
    (select f.id_user
      from 
     followings f 
     where 
     f.id_me =(my id) )
    order by id limit 11

现在,您不需要在两个表之间执行交叉积,然后过滤it....now,首先过滤大表(如下所示),所以它必须比联接更快。

票数 0
EN

Stack Overflow用户

发布于 2014-02-18 18:11:23

查询没有根本问题,索引也不远。

为了最大限度地利用索引,不仅要了解将使用哪些列,而且要了解最有效的顺序,以便将数据从哪些列中提取出来。

将following上的索引替换为id_me, id_user (与您描述的相反)。

这样,MySql就可以:

  • 首先在following中查找合适的行,方法是查找索引的一小部分(这是减少需要完成的工作量的最佳方法)。
  • 使用id_user数据在following上的索引,以便.
  • 使用该表上现有的索引在posts中找到正确的行。

基本上,试着找出如何找到数据,然后提供索引来帮助MySql为您做这件事。

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

https://stackoverflow.com/questions/21861687

复制
相关文章

相似问题

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