数据库学习之如何正确的显示随机消息

  1. order by rand()
    该方法需要将相关的数据读取出来,放到内存临时表中进行排序,在内存临时表排序的时候使用了rowid排序方法,然后把相关的结果进行返回。
    临时表的分类:内存临时表+磁盘临时表。
    对内存表而言,回表过程知识简单的根据数据行的位置,直接访问内存得到的数据,根本不会导致多访问。因此在全字段排序和rowid排序中进行选择时,会选择rowid排序。可以减少访问的行数。
    MySql 的表用来定位一行数据的方式
    当该表有主键时,令rowid等于主键的值,来完成定位额
    当该表无主键时,由系统随机生成的值来定义rowid,从而完成定位
    内存临时表转换为磁盘临时表:当tmp_table_size这个配置限制了内存临时表的大小,默认16M,超过该值是,内存临时表将会转换为磁盘临时表
    全字段排序转换为rowid排序:当max_length_for_sort_data限制了待查询字段的长度。超过该值时,全字段排序转换为rowid排序
    rowid 排序中的优先队列排序算法转换为归并排序:limit的值限制了需要维护的堆的大小。当维护的堆的大小超过了设置的sort_buffer_size大小时,优先队列排序算法转换为归并排序
  2. 随机排序方法2
    1 取得这个表的主键 id 的最大值 M 和最小值 N;
    2 用随机函数生成一个最大值到最小值之间的数 X = (M-N)*rand() + N;
    3 取不小于 X 的第一个 ID 的行。
  3. 随机排序方法3
    1 取得整个表的行数,并记为 C。
    2 取得 Y = floor(C * rand())。 floor 函数在这里的作用,就是取整数部分。
    3 再用 limit Y,1 取得一行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值