MySQL的超时问题
问题描述:
我现在面临严重的问题,在我的锻炼,而正在运行相同的代码与本地主机相同的数据库时,它的正常工作与PHP和MySQL Linux服务器上。MySQL的超时问题
除了我在数据库中的表和MySQL差不多30000条记录是:
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
其采取在我的本地0.0010秒和无限我们的Linux服务器上。我无法找到原因。
感谢 卡迈勒
答
,你能否证实这个返回相同的结果?这样应该会更快。联盟有时是有用的,但并未真正优化。
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:我假设你有指标未oser_id和id_movie
编辑:你的问题可能来自rand()
MySQL order by optimization查找RAND()的页面:在注释也有一些性能测试=>兰特()单独接缝是一个坏的溶液
性能
现在让我们来看看我们的表现会发生什么。我们有3个不同的 查询解决我们的问题。
- Q1。 ORDER BY RAND()
- Q2。 RAND()* MAX(ID)
- Q3。 RAND()* MAX(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.081小号|| 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.60s || 0:00.614s | 0:00.628s || 0:00.637s
正如您所看到的,ORDER BY RAND()在表格中只有100行时已经在 优化查询之后。
你有你的表有正确的'indexes'? –
你用php标记了这个问题,但只给我们一个SQL语句 - 你是否尝试过SQL命令行上的语句或像phpmyadmin这样的数据库工具?也许它不是SQL语句是缓慢的,但有你的PHP脚本,并链接编辑通过优化订购 – cypherabe