简体   繁体   English

如何进一步优化SQL查询?

[英]How to optimize SQL query more?

First at all i am nood into SQL thing, Now i am working on a class project where I have some tables like 首先,我非常喜欢SQL,现在我正在一个类项目中,其中有一些表

Table user 表用户

user_id  |  username | name 
   1     |    nihan  |  Nihan Dip
   2     |     dip   |  Meaw ghew
  more   |  more     | more

Table Friend 表友

you    | friend_id  
 1     |    2
 1     |    27
 2     |    9
 more  |   more

Table Follow 表跟随

user_id   |  follows
  1       |   99
  7       |   34

Table post 表帖

post_id   |  user_id  | type  |  content  | post_time
  1       |   1       |  text | loren toren | timestamp
  2       |   2       | text  | ipsum       | timestamp

Now i want to get post by users friend and who he follows and offcourse his so i made this SQL 现在我想由用户朋友和他关注的人以及他的追随者发帖,所以我做了这个SQL

SELECT 
    username, name,content, post_time
FROM
    post
        INNER JOIN
    user ON user.user_id = post.user_id
WHERE
    post.user_id IN (SELECT 
            friend_id
        FROM
            friend
        WHERE
            you = 1 

        UNION ALL 

        SELECT 
            follows
        FROM
            follow
        WHERE
            user_id = 1)
        OR post.user_id = 1
ORDER BY post_time DESC
LIMIT 10

this query works just fine. 该查询工作正常。 I just wanted to know is there anymore optimization could be done? 我只是想知道是否可以进行优化了? Then how? 那怎么办 Please teach me :) 请教我 :)

Instead of using IN try it with JOIN add add few more indexes . 而不是使用IN尝试与JOIN添加添加更多的索引

SELECT  DISTINCT u.name, u.username,
        p.content, p.post_time
FROM    post p
        INNER JOIN user u
            ON u.user_id = p.user_id
        INNER JOIN
        (
            SELECT  friend_id id
            FROM    friend
            WHERE   you = 1 
            UNION ALL 
            SELECT  follows id
            FROM follow
            WHERE user_id = 1
        ) s ON p.user_id = s.ID
ORDER BY post_time DESC
LIMIT 10

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM