首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻塞好友sql (超慢sql??)

阻塞好友sql (超慢sql??)
EN

Stack Overflow用户
提问于 2011-02-20 18:20:49
回答 2查看 132关注 0票数 0

嗨,我对这个sql有问题。基本上,它会显示我的朋友发布的状态,并过滤掉我屏蔽的朋友。

sql是slooooowwwwwww处理它需要2秒。似乎是什么问题。(我已经在sql下面列出了一些表和一些示例),提前谢谢!sql....

代码语言:javascript
复制
SELECT from_user_id,content,wall.date, wall.wall_type, users.id, users.displayname 
            FROM wall

            INNER JOIN friendship ON ( wall.from_user_id =friendship.user_a OR wall.from_user_id = friendship.user_b ) 
            INNER JOIN users ON (wall.from_user_id = users.id)WHERE users.id not in (select blocked_id from blocklist where user_id = 1) and (wall.wall_type = 'home' OR wall.wall_type = 'profile' or wall.wall_type = 'topro') AND (
                  (friendship.user_a = 1 and friendship.user_b = wall.from_user_id)
                or  
                    (friendship.user_a = wall.from_user_id and friendship.user_b = 1)    or (wall.user_id_of_wall = 1 or type_id = 1 or from_user_id = 1))GROUP BY wall_id ORDER BY date DESC LIMIT 10 

(表名:阻止列表)

代码语言:javascript
复制
    user_id | blocked_id
        1     74
        1     70
        1     94
        1     81

(表名:friendhip)

代码语言:javascript
复制
user_a   user_b status  date
1        93         1   1297323354
1        79         1   1297323409
1        81         1   1297323403
1        82         1   1297323398
1        85         1   1297323389
1        90         1   1297323367
1        89         1   1297323373

(表名:用户)

代码语言:javascript
复制
       id   displayname
        1   Kenny  Jack
        8   Wale Robinson
        7   Victor WIlliams
        6   Micheal Harris
        9   Micheal Boston
        10  Yestor Smith

靠墙的桌子

代码语言:javascript
复制
wall_id wall_type   user_id_of_wall   type_id   from_user_id    content      viewed   date
   5    profile        8                    8          8         Just chilling! 0   1296858001

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-20 18:25:27

NOT IN用于固定值,请改用NOT EXISTS:

代码语言:javascript
复制
SELECT from_user_id,content,wall.date, wall.wall_type, users.id, users.displayname 
            FROM wall

            INNER JOIN friendship ON ( wall.from_user_id =friendship.user_a OR wall.from_user_id = friendship.user_b ) 
            INNER JOIN users ON (wall.from_user_id = users.id)
WHERE not exists (select * from blocklist where users.id = blocked_id AND user_id = 1) and wall.wall_type IN ('home', 'profile', 'topro') AND (
                  (friendship.user_a = 1 and friendship.user_b = wall.from_user_id)
                or  
                    (friendship.user_a = wall.from_user_id and friendship.user_b = 1)    or (wall.user_id_of_wall = 1 or type_id = 1 or from_user_id = 1))
GROUP BY wall_id
ORDER BY date DESC LIMIT 10 

编辑用于固定值的Use IN (wall_type)...

票数 2
EN

Stack Overflow用户

发布于 2011-03-01 17:15:06

在只读查询中始终使用WITH (NOLOCK)!

另外,请删除您的JOIN子句中的所有括号,这是您从MS Access复制并粘贴的吗?

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

https://stackoverflow.com/questions/5056401

复制
相关文章

相似问题

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