mysql随机显示记录_MySQL随机读取表中记录

order by rand()来实现

select * from table order by rand();

内存临时表

order by rand() 是一般通过内存临时表排序,可以通过执行计划explain中Extra字段显示Using temporary观察到。

由于是内存排序,回表过程不涉及机械磁盘io操作,速度较快,因此使用的是rowId 排序的方式。

内存临时表使用的是memory引擎,此时的rowId相当于数组下标.

磁盘临时表

tmp_table_size这个配置限制了内存临时表的大小,默认值是16M。如果临时表大

小超过了tmp_table_size,那么内存临时表就会转成磁盘临时表。

磁盘临时表使用的引擎默认是InnoDB,是由参数internal_tmp_disk_storage_engine控制的。

当使用磁盘临时表的时候,对应的就是一个没有显式索引的InnoDB表的排序过程

此时的排序使用归并排序或优先队列排序。

当排序的数据使用limit时,数据量不大时,使用优先队列。数据量大时,仍使用文件的归并排序。

使用随机计算方式

随机id

查询到最大最小id,取之间的随机数,再根据id查询。

快,但不适用于常出现id空洞的数据

随机行之后数据

查询到总行数,根据总行数取随机数,使用limit取随机行数之后的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值