丁奇-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加载数据之后抽取。

你可能感兴趣的:(丁奇-MySQL实战读书笔记17)