技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> MySQL --> Mysql的随机读取

Mysql的随机读取

浏览:6879次  出处信息

随机读取数据库记录,搜索发现很多人都使用 order by rand() 来达到该目的,这是mysql提供的功能。但是实际上存在非常严重的性能问题。 如果表里记录不多,偶尔用一下也可以。但是如果数据多的话,就会凸显出查询的性能问题。

随机查询5条记录:

SELECT * FROM `table` ORDER BY RAND() LIMIT 5;

在数十万记录的表里,这样的查询要好几秒的时间。下面采用JOIN的方式改进一下:

SELECT *
FROM `table` AS t1 JOIN (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC LIMIT 5;

这样得到连续的5条记录。要不联续的记录,可以连续查询几次,每次limit 1条。这淡水比较推荐,SQL语句比较清晰,效率也不错。

还有,可以这样的:

SELECT * FROM `table`
WHERE id >= (SELECT FLOOR(RAND() * (SELECT MAX(id) FROM `table`)))  ORDER BY id LIMIT 1;

其他更复杂的实现,淡水无视之。

建议继续学习:

  1. HBase随机写以及随机读性能测试    (阅读:6490)
  2. PHP概率算法(适用于抽奖、随机广告)    (阅读:3209)
  3. 几个随机算法    (阅读:2608)
  4. PHP伪随机发生器    (阅读:2325)
  5. 趣题:随机折断的木棒    (阅读:2262)
  6. 一道随机数题目的求解    (阅读:2005)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:MySQL的临时表
后一篇:xtrabackup知多少 >>
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1