美文网首页
MySQL随机读取表中记录

MySQL随机读取表中记录

作者: 森林中大鸟 | 来源:发表于2020-06-29 21:39 被阅读0次

    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取随机行数之后的数据。

    相关文章

      网友评论

          本文标题:MySQL随机读取表中记录

          本文链接:https://www.haomeiwen.com/subject/qinafktx.html