【问题标题】:MySQL: simplifying a complex queryMySQL:简化复杂查询
【发布时间】:2012-11-17 01:58:44
【问题描述】:

我根据博客中的许多教程和 stackoverflow 上的答案进行了以下查询。

$query = mysql_query("SELECT COUNT(user_id) FROM $table f1".
"WHERE (user_id = '$userA')".
"AND EXISTS (SELECT 1 FROM $table f2 WHERE user_id = '$userB'"
"AND f1.$field = f2.$field)")  

or die(mysql_error());  
while($row = mysql_fetch_array($query)){
    $com = $row['COUNT(user_id)'];
}

userA、userB等参数由4000个值的一维数组取值。但实际上,我在循环内使用循环来制作一个 4000x4000 大小的表格。

由于数据库中的数据很多,总查询量将是 17.000.000。所以,我尝试执行完整的脚本,但我看到在上面的查询中花了很多秒(1 或 2)。

您有什么建议可以通过更正上述查询来提高执行速度?

【问题讨论】:

    标签: php mysql infinite-loop large-data


    【解决方案1】:

    我认为您可以使用INNER JOIN 查询,如下所示:

     SELECT COUNT(f1.user_id) 
     FROM $table f1 JOIN $table f2 
        ON f1.$field = f2.$field
     WHERE f1.user_id = '$userA'
        AND f2.user_id = '$userB'
    

    【讨论】:

    • 天啊!现在真的很快! (每秒 30 次而不是每秒 1 次!)
    • @zuperakos 子选择在 mysql 中优化不佳。尽可能避免使用它们。
    猜你喜欢
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    相关资源
    最近更新 更多