全字段排序
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)