现在的位置: 首页 > 综合 > 正文

解决Mysql坑爹的随机函数rand()

2017年12月27日 ⁄ 综合 ⁄ 共 714字 ⁄ 字号 评论关闭

原始的sql语句是:

select content poetryDesc,author poetryAnthor,l.backImg labelImg,p.id poetryId,p.fullContent flag from dd_poetry p join dd_label l 
on l.id = p.archaics 
order by rand()

直接随机在数据量过大的时候,导致数据库服务器cpu瞬间100%

优化之后的sql:

-- SELECT id FROM table t1 JOIN (SELECT round(RAND() * (SELECT MAX(id) FROM table)) AS nid FROM table LIMIT n) t2 ON t1.id = t2.nid;


-- select * from dd_poetry t1 join (select round(rand() * (select max(id) from dd_poetry)) as nid from dd_poetry ) t2 on t1.id = t2.nid


select content poetryDesc,author poetryAnthor,l.backImg labelImg,p.id poetryId,p.fullContent flag from dd_poetry p join dd_label l 
on l.id = p.archaics 
join (select round(rand() * (select max(id) from dd_poetry)) as nid from dd_poetry ) t2
on p.id = t2.nid

感谢:http://imysql.cn/2014/07/04/mysql-optimization-case-rand-optimize.shtml

抱歉!评论已关闭.