mysql隨機顯示記錄 MySQL隨機讀取表中記錄

2021-10-20 23:34:33 字數 709 閱讀 6632

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...