随机获取数据的业务场景,想必大家都有遇到过,今天我们分析一下如何正确的显示随机消息.
mysql> CREATE TABLE `words` (
`id` int(11) NOT NULL AUTO_INCREMENT...我们在来看看上面随机获取字段的sql语句是如何执行的
创建一个临时表,临时表使用的是memory引擎,表里面有两个字段,一个字段double类型,我们叫R,另一个字段varchar(64),记为W,且没有建立索引...上图我们发现sort_buffer中的位置信息,是个什么概念呢,而Mysql是如何定位一行数据的呢,
首先我们知道mysql中有以下规则
对于有主键的innodb表来说,rowid就是我们的主键
对于没有主键的...select * from t where id >= @X limit 1;
虽然上面可以获取一个数,但是他并不是一个随机数,因为如何表中的id可能存在空洞,导致每一行的获取概率并不一样,如id=1,2,4,5...现在如果要获取三个随机数,根据随机算法2的思路
获取整张表的总行数C
根据同样的共识获取Y1,Y2,Y3
再执行limit Y,1.获取三个随机数
对应的sql语句如下
mysql> select