全字段排序
explain 中的 using fiesort ,扫描 数据,取出符合判断条件的 数据,到sort buffer中,然后对排序字段采用快速排序进行 排序后直接将 所需字段进行返回
如果 字段长度所占内存大于所分配 的sort buffer ,需要借助 临时文件 进行 数据的存放排序,此时会采用 归并排序,将数据查分为多份存储到多个 临时文件,各自排序后再合并
rowid排序
配置排序数据行的最大长度,大于该长度采用rowid 算法
即只取 排序字段和主键id 到 sort-buffer, 排序后得到顺序id , 回到主键索引树 取目标字段后返回
相比全字段排序 多了一次到 主键树 取值的操作
联合索引联结 判断字段和排序字段
索引就可以实现排序,但还需要回表查所需字段
覆盖索引
两个算法思想
大数据量情况下获取排序前三的数据 — 优先队列排算法
数据库数据如何实现随机获取数据?
1.order by rand() 临时表 + filesort
2.获取最大后 rand 取 下一条大于该值的id -------> id空洞会导致 随机失效
3.获取 count() 后 取limit (rand(count) ,1)