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取隨機行數之後的資料。
mysq相關記錄
1 查詢語句的優化 使 explain找出語句瓶頸 2 使用變數替換now 等 函式,啟用查詢快取 3 使用連線池 4 使用記憶體表 引擎設為memory 5 使用mysql語句分析工具 6 innodb引擎優化 7 where條件排序 where語句從前往後執行,限制範圍小的應放在前面.能夠快速縮...
mysql隨機獲取記錄
size medium mysql的隨機抽取實現方法。舉個例子,要從tablename表中隨機提取一條記錄,大家一般的寫法就是 select from tablename order by rand limit 1 但是,後來我查了一下mysql的官方手冊,裡面針對rand 的提示大概意思就是,在o...
mysql隨機獲取記錄
mysql隨機獲取記錄 mysql的隨機抽取實現方法。舉個例子,要從tablename表中隨機提取一條記錄,大家一般的寫法就是 select from tablename order by rand limit 1 但是,後來我查了一下mysql的官方手冊,裡面針對rand 的提示大概意思就是,在o...