作者:王雪迎
貌似有问题: SELECT id FROM t ORDER BY RAND() LIMIT 10; +——–+ | id | +——–+ | 807507 | | 268104 | | 279004 | | 523691 | | 625104 | | 135054 | | 449935 | | 444616 | | 630964 | | 315123 | +——–+ 结果是随机的 SELECT id...
View Article作者:yejr
哈哈,你没注意到我最开始交代的测试场景: 往这个表里灌入一些测试数据,至少10万以上, id 字段也是乱序的。 不过,你的结果看起来像是顺序的,但实际应用中,是先随机取得最小值,因此对终端用户来说,其实还是随机的 :)
View Article作者:john
试试看这个 select a.* from t as a join (select round(rand()*(select max(id) from t)) as id from t limit 100) as b on a.id = b.id limit 10; 只要id从1开始,并基本保证自增,应该可以满足需求。但是id不连续的话,这个办法不能排除取不满10个的可能。
View Article作者:王雪迎
我的测试场景: CREATE TABLE test.t ( id int(10) UNSIGNED NOT NULL, name varchar(64) NOT NULL DEFAULT ”, INDEX id (id) ) ENGINE = INNODB; PROCEDURE test.p1(n int) BEGIN SET @x = 0; WHILE @x < n DO INSERT...
View Article作者:yejr
随机取N条记录,可以这样: 1、从数据库中随机顺序取得N条记录; 2、从随机顺序X开始,往后取N条记录; 后面这种看起来不太像真正的随机,不过也是可以接受的:)
View Article