mysql - 如何减少 MySQL O(n^2) 查询的时间?

标签 mysql facebook

尝试运行此查询以找到两组(在一个页面上发帖的用户和在另一个页面上发帖的用户)的交集。不幸的是,这需要花费大量时间才能完成(10 多分钟)。有什么办法可以降低它的复杂性吗?

SELECT DISTINCT (user_id) 
FROM facebook_post_comments 
WHERE page_id = some_page_id 
AND user_id IN ( SELECT DISTINCT(user_id) 
                 FROM facebook_post_comments 
                 WHERE page_id = some_other_page_id )

最佳答案

有一个 bug在 MySQL 中,带有子查询的 IN 有时性能很差(已在 MySQL 5.6 中修复)。

改为使用 JOIN 尝试此查询:

SELECT DISTINCT user_id
FROM facebook_post_comments T1 
JOIN facebook_post_comments T2
    ON T1.user_id = T2.user_id
    AND T2.page_id = some_other_page_id
WHERE T1.page_id = some_page_id

关于mysql - 如何减少 MySQL O(n^2) 查询的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7854908/

相关文章:

mysql - 如何从mysql命令行恢复mysql xml数据库文件?

php - 使用一个查询和一个 php 文件显示两个不同表中的图像

ios - 无法获取远程 View Controller ,错误为 : Error: domain=_UIViewServiceInterfaceErrorDomain, code=2

javascript - 通过 Facebook JavaScript SDK 调用图形 API

apache-flex - 如何将 "Share on Facebook"按钮嵌入到 Flex 应用程序中?

php - 无法运行我的登录表单的查询

MySQL加入并获取所有关系,即使为0

MySQL 查询仅在行存在时返回值

javascript - 为什么更改 XMLHttpRequest 会破坏 FB?

android - Activity 流程 : OnCreate called when I want to resume my activity