MySQL实战45讲 第十七讲笔记

如何正确地显示随机消息

rowid

对于没有主键,InnoDB会自己生成一个6字节的rowid作为主键。
所以有主键的时候,rowid就是主键。

order by rand()

使用了内存临时表,内存临时表排序的时候用了rowid排序方法。所以不建议使用order by rand(),涉及到内存临时表,sort_buffer。

磁盘临时表

tmp_table_size这个配置限制了内存临时表,默认值是16M。如果临时表大小超过tmp_table_size,那么内存临时表会转成磁盘临时表。
磁盘临时表使用的引擎默认是 InnoDB,是由参数 internal_tmp_disk_storage_engine
控制的。

优先队列排序法

MySQL 5.6 版本引入的一个新的排
序算法,使用limit的时候。
filesort_priority_queue_optimization 这个部分的
chosen=true,就表示使用了优先队列排序算法。

随机选取方法

  • 随机取max_id - min_id 之间的一个值,取不小于该值的第一行。

可能id不连续。

  • 取总行数,选择某一行Y,再取。

扫描行数增加每次扫Y+1行。

你可能感兴趣的:(MySQL实战45讲 第十七讲笔记)