【问题标题】:MySQL time out issueMySQL超时问题
【发布时间】:2015-10-15 14:53:17
【问题描述】:

我在与 Linux 服务器上的 PHP 和 MySql 相关的锻炼中遇到了严重的问题,而当我在 localhost 中使用相同的数据库运行相同的代码时,它工作正常。

以及我在数据库表中有将近 30,000 条记录,而 mysql 是:

SELECT * FROM tbl_movies where id not in (select movie_id from tbl_usermovieque where user_id='3' union 
                                      select movie_id from tbl_user_movie_response where user_id='3' union 
                                      select movie_id from tbl_user_movie_fav where user_id='3') and id < 220 order by rand() limit 0,20

在我的 localhost 和我们的 linux 服务器上的 INFINITE 需要 0.0010 秒。我找不到原因。

谢谢 卡马尔

【问题讨论】:

  • 您的表格中有正确的indexes 吗?
  • 您确实用 php 标记了问题,但只向我们展示了一条 SQL 语句 - 您是否在 SQL 命令行或数据库工具(如 phpmyadmin)上尝试过该语句?可能不是 SQL 语句慢,而是你的 php 脚本和 sql server 之间的通信有问题

标签: php mysql timeout


【解决方案1】:

你能确认这会返回相同的结果吗?这种方式应该更快。联合有时很有用,但没有真正优化。

SELECT * FROM tbl_movies where id not in (
    select distinct movie_id
    from tbl_movies m
    inner join tbl_usermovieque um ON um.movie_id = m.movie_id = m.movie_id
    inner join tbl_user_movie_response umr ON umr.movie_id = m.movie_id = m.movie_id
    inner join tbl_user_movie_fav umf ON umf.movie_id = m.movie_id = m.movie_id
    where um.user_id = 3 or umr.user_id = 3 or umf.user_id = 3
) and id < 220 order by rand() limit 0,20;

PS : 我假设你有索引 un oser_id 和 id_movie

编辑:您的问题可能来自rand()

MySQL order by optimization 在页面中查找 RAND() :在评论中有一些性能测试 => rand() 单独接缝是一个糟糕的解决方案

性能

现在让我们看看我们的表现发生了什么变化。我们有 3 个不同的 查询来解决我们的问题。

  • 第一季度。按兰德()订购
  • 第二季度。兰德() * 最大值(ID)
  • 第三季度。 RAND() * MAX(ID) + 按 ID 排序

Q1 预计花费 N * log2(N),Q2 和 Q3 几乎不变。

我们用 N 行(一千到 一百万)并执行每个查询 1000 次。

行 ||100 ||1.000 ||10.000 ||100.000 ||1.000.000

Q1||0:00.718s||0:02.092s||0:18.684s||2:59.081s||58:20.000s Q2||0:00.519s||0:00.607s||0:00.614s||0:00.628s||0:00.637s Q3||0:00.570s||0:00.607s||0:00.614s|0:00.628s ||0:00.637s

如您所见,简单的 ORDER BY RAND() 已经在 表中仅 100 行的优化查询。

【讨论】:

  • 已通过优化订购链接编辑
  • 谢谢您的详细回答,但我的情况并非如此。
猜你喜欢
  • 2010-12-02
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 2013-03-03
  • 2018-05-12
  • 1970-01-01
相关资源
最近更新 更多