select * from table order by rand() limit n n为随机取条数,效率数据量大低。可以自己生成随机数取。
#9
随便写了个 循环6次的从100个查15个的单元测试,跑了五分钟还没有出结果啦
#10
SELECT * FROM table
WHERE id >= (
(SELECT MAX(id) FROM table WHERE xxx = 'xxx')-
(SELECT MIN(id) FROM table WHERE xxx= 'xxx')
) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= 'xxx')
LIMIT n 你试试这样行不 利用id取 n是要取得条数
SELECT * FROM table
WHERE id >= (
(SELECT MAX(id) FROM table WHERE xxx = 'xxx')-
(SELECT MIN(id) FROM table WHERE xxx= 'xxx')
) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= 'xxx')
LIMIT n 满足where条件的随机数 取n条数据 试试楼主
#13
SELECT * FROM table
WHERE id >= (
(SELECT MAX(id) FROM table WHERE xxx = 'xxx')-
(SELECT MIN(id) FROM table WHERE xxx= 'xxx')
) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= 'xxx')
LIMIT n 你试试这样行不 利用id取 n是要取得条数
SELECT * FROM table
WHERE id >= (
(SELECT MAX(id) FROM table WHERE xxx = 'xxx')-
(SELECT MIN(id) FROM table WHERE xxx= 'xxx')
) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= 'xxx')
LIMIT n 你试试这样行不 利用id取 n是要取得条数
那你就别用sql了 java处理吧 像你说的拿到所有where条件的数据,放list中 然后随机取N条 从list中去随机取 给你一段 list中随机取多少的代码 你看看
/**
* 函 数 名 :getRandomNumList
* 方法描述:随机抽取N个元素
* @param list 总数量
* @param selected 取多少元素
* @return List<String>
*/
public List<bean> getRandomNumList(List<bean> list, int selected) {
List<beanVo> reList = new ArrayList<beanVo>();
Random random = new Random();
for (int i = 0; i < selected; i++) {
// 随机数的范围为0-list.size()-1;
int target = random.nextInt(list.size());
reList.add(list.get(target));
}
return reList;
}
#15
SELECT * FROM table
WHERE id >= (
(SELECT MAX(id) FROM table WHERE xxx = 'xxx')-
(SELECT MIN(id) FROM table WHERE xxx= 'xxx')
) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= 'xxx')
LIMIT n 满足where条件的随机数 取n条数据 试试楼主
SELECT * FROM table
WHERE id >= (
(SELECT MAX(id) FROM table WHERE xxx = 'xxx')-
(SELECT MIN(id) FROM table WHERE xxx= 'xxx')
) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= 'xxx')
LIMIT n 你试试这样行不 利用id取 n是要取得条数
那你就别用sql了 java处理吧 像你说的拿到所有where条件的数据,放list中 然后随机取N条 从list中去随机取 给你一段 list中随机取多少的代码 你看看
/**
* 函 数 名 :getRandomNumList
* 方法描述:随机抽取N个元素
* @param list 总数量
* @param selected 取多少元素
* @return List<String>
*/
public List<bean> getRandomNumList(List<bean> list, int selected) {
List<beanVo> reList = new ArrayList<beanVo>();
Random random = new Random();
for (int i = 0; i < selected; i++) {
// 随机数的范围为0-list.size()-1;
int target = random.nextInt(list.size());
reList.add(list.get(target));
}
return reList;
}
刚才回错啦,跑了好几分钟的写法是
SELECT * FROM table
WHERE xxx='xxx' AND id >= (
(SELECT MAX(id) )-
(SELECT MIN(id) FROM table )
) * RAND() + (SELECT MIN(id) )
LIMIT n
取所有再java随机取的方法可以实现啦,但是将近一分钟也还是有点难以忍受啦。
CREATE PROCEDURE `aa`() BEGIN DECLARE i int; DECLARE c int; set i = 0; set autocommit = 0; while i < 1000 do set c = 0; while c < 1000 do insert into test VALUES( LPAD(i*1000+c,10,'0')); set c=c+1; end while; commit; set i=i+1; end while; set autocommit = 1; END
查询
select * from test WHERE sss > '0000100023' and sss < '0000200023' ORDER BY rand() LIMIT 100
耗时0.12S, 服务器是阿里云RDS最低配置。
ORDER BY rand() LIMIT N会慢吗?
#24
按条件取出10w条记录,再从10W中随机取100条,花费都在前面取10W条记录上呢。
#25
用这样只返回主键的SQL做子查询,再复杂表又怎样,开销还是在条件查询上。
#26
select * from .....
where id in (3,6,8,23,4);
id 列表是随机数,由 Java 随机生成
当然,如果表中数据的Id不连续,那么查出来的结果肯定不足
select * from table order by rand() limit n n为随机取条数,效率数据量大低。可以自己生成随机数取。
#9
度娘的回答是加 ORDER BY rand() LIMIT n , 没毛病啊,为啥不接受
select * from table order by rand() limit n n为随机取条数,效率数据量大低。可以自己生成随机数取。
随便写了个 循环6次的从100个查15个的单元测试,跑了五分钟还没有出结果啦
#10
SELECT * FROM table
WHERE id >= (
(SELECT MAX(id) FROM table WHERE xxx = 'xxx')-
(SELECT MIN(id) FROM table WHERE xxx= 'xxx')
) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= 'xxx')
LIMIT n 你试试这样行不 利用id取 n是要取得条数
#11
度娘的回答是加 ORDER BY rand() LIMIT n , 没毛病啊,为啥不接受
select * from table order by rand() limit n n为随机取条数,效率数据量大低。可以自己生成随机数取。
SELECT * FROM table
WHERE id >= (
(SELECT MAX(id) FROM table WHERE xxx = 'xxx')-
(SELECT MIN(id) FROM table WHERE xxx= 'xxx')
) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= 'xxx')
LIMIT n 满足where条件的随机数 取n条数据 试试楼主
#13
SELECT * FROM table
WHERE id >= (
(SELECT MAX(id) FROM table WHERE xxx = 'xxx')-
(SELECT MIN(id) FROM table WHERE xxx= 'xxx')
) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= 'xxx')
LIMIT n 你试试这样行不 利用id取 n是要取得条数
SELECT * FROM table
WHERE id >= (
(SELECT MAX(id) FROM table WHERE xxx = 'xxx')-
(SELECT MIN(id) FROM table WHERE xxx= 'xxx')
) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= 'xxx')
LIMIT n 你试试这样行不 利用id取 n是要取得条数
那你就别用sql了 java处理吧 像你说的拿到所有where条件的数据,放list中 然后随机取N条 从list中去随机取 给你一段 list中随机取多少的代码 你看看
/**
* 函 数 名 :getRandomNumList
* 方法描述:随机抽取N个元素
* @param list 总数量
* @param selected 取多少元素
* @return List<String>
*/
public List<bean> getRandomNumList(List<bean> list, int selected) {
List<beanVo> reList = new ArrayList<beanVo>();
Random random = new Random();
for (int i = 0; i < selected; i++) {
// 随机数的范围为0-list.size()-1;
int target = random.nextInt(list.size());
reList.add(list.get(target));
}
return reList;
}
#15
SELECT * FROM table
WHERE id >= (
(SELECT MAX(id) FROM table WHERE xxx = 'xxx')-
(SELECT MIN(id) FROM table WHERE xxx= 'xxx')
) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= 'xxx')
LIMIT n 满足where条件的随机数 取n条数据 试试楼主
SELECT * FROM table
WHERE id >= (
(SELECT MAX(id) FROM table WHERE xxx = 'xxx')-
(SELECT MIN(id) FROM table WHERE xxx= 'xxx')
) * RAND() + (SELECT MIN(id) FROM table WHERE xxx= 'xxx')
LIMIT n 你试试这样行不 利用id取 n是要取得条数
那你就别用sql了 java处理吧 像你说的拿到所有where条件的数据,放list中 然后随机取N条 从list中去随机取 给你一段 list中随机取多少的代码 你看看
/**
* 函 数 名 :getRandomNumList
* 方法描述:随机抽取N个元素
* @param list 总数量
* @param selected 取多少元素
* @return List<String>
*/
public List<bean> getRandomNumList(List<bean> list, int selected) {
List<beanVo> reList = new ArrayList<beanVo>();
Random random = new Random();
for (int i = 0; i < selected; i++) {
// 随机数的范围为0-list.size()-1;
int target = random.nextInt(list.size());
reList.add(list.get(target));
}
return reList;
}
刚才回错啦,跑了好几分钟的写法是
SELECT * FROM table
WHERE xxx='xxx' AND id >= (
(SELECT MAX(id) )-
(SELECT MIN(id) FROM table )
) * RAND() + (SELECT MIN(id) )
LIMIT n
取所有再java随机取的方法可以实现啦,但是将近一分钟也还是有点难以忍受啦。
CREATE PROCEDURE `aa`() BEGIN DECLARE i int; DECLARE c int; set i = 0; set autocommit = 0; while i < 1000 do set c = 0; while c < 1000 do insert into test VALUES( LPAD(i*1000+c,10,'0')); set c=c+1; end while; commit; set i=i+1; end while; set autocommit = 1; END
查询
select * from test WHERE sss > '0000100023' and sss < '0000200023' ORDER BY rand() LIMIT 100
耗时0.12S, 服务器是阿里云RDS最低配置。
ORDER BY rand() LIMIT N会慢吗?
#24
按条件取出10w条记录,再从10W中随机取100条,花费都在前面取10W条记录上呢。
#25
用这样只返回主键的SQL做子查询,再复杂表又怎样,开销还是在条件查询上。
#26
select * from .....
where id in (3,6,8,23,4);
id 列表是随机数,由 Java 随机生成
当然,如果表中数据的Id不连续,那么查出来的结果肯定不足