最簡單的方式是使用
mysql 的 order by rand() 子句。
select
col1 from tbl order by rand() limit
10; 它能很好的執行在小表中。然而,對於大表,生成隨機列表行時將產生乙個嚴重的效能問題,mysql
需要對每一行進行隨機,然後對它們排序。 即使你只想從10w的結果集中取其中隨機10行,mysql也需要對這10w行進行排序並且只提取其中的10行。 為了解決這個問題,我在
where 子句中使用 rand 並且不使用order by 子句。首先,你需要計算表中的總行數和你想要的得到隨機行數。其次,在 where
子句中加入該碎片數字,並要求結果只能小於(或等於)從這個碎片數字。
例如,假設你有乙個20萬行的表,你只需要從表中隨機100行。這個碎片數是從100/總行數得到:100
/ 20萬= 0.0005。
該查詢將如下所示:select
col1 from tbl where rand() <= 0.0005;
為了得到準確的100行結果集,我們可以增加碎片數字和
limit限制:例如
select
col1 from tbl where
rand()<=0.0006 limit 100;
原文:
mysql 如何選擇隨機行
最簡單的方式是使用 mysql 的 order by rand 子句。select col1 from tbl order by rand limit 10 它能很好的執行在小表中。然而,對於大表,生成隨機列表行時將產生乙個嚴重的效能問題,mysql 需要對每一行進行隨機,然後對它們排序。即使你只想...
mysql行 《Mysql 行模式》
一 總結 預設的行格式定義 innodb default row format 檢視當前資料表行格式 show table status table 建立表指定行格式 create table table row format dynamic 修改錶行格式 alter table table row...
mysql行格式 MySQL 行格式
以 mysql 預設的儲存引擎 innodb 為例 innodb 包含以下四種行格式 compact redundant dynamic compressed 指定行格式 create table 表名 列的資訊 row format 行格式名稱 alter table 表名 row format ...