丁奇-MySQL实战读书笔记17

如何正确地显示随机消息?

方案1:内存临时表

mysql> select word from words order by rand() limit 3;
image.png

order by rand() 使用了内存临时表,内存临时表排序的时候使用了 rowid 排序方法。

方案2:随机排序方法

取得这个表的主键 id 的最大值 M 和最小值 N;用随机函数生成一个最大值到最小值之间的数 X = (M-N)*rand() + N;取不小于 X 的第一个 ID 的行。我们把这个算法,暂时称作随机算法 1。这里,我直接给你贴一下执行语句的序列:

mysql> select max(id),min(id) into @M,@N from t ;
set @X= floor((@M-@N+1)*rand() + @N);
select * from t where id >= @X limit 1;

其实随机抽取的话建议使用其他手段,比如使用redis加载数据之后抽取。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.锁有两种类型:读锁和写锁。读锁是共享的,或者说是相互不阻塞的,多个客户在同一时刻可以同时读取同一资源,而互不干...
    奔跑的Robi阅读 2,615评论 0 0
  • 一、MySQL架构与历史 A.并发控制 1.共享锁(shared lock,读锁):共享的,相互不阻塞的 2.排他...
    ZyBlog阅读 19,924评论 3 177
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 10,168评论 0 30
  • 全书的重点在四五六章:如何建表、如何建索引、如何查询。第一章讲解了一些基本概念:锁与事物隔离 重中之重:4.1数据...
    AbrahamW阅读 4,585评论 0 0
  • 1. 机器学习 评估假设一旦我们通过以下方式在我们的预测中做了一些故障排除:获得更多培训示例尝试更小的功能集尝试其...
    molscar阅读 4,037评论 0 0