SELECT p.id as productid,p.id,p.name as productname,p.clicked AS hits,p.name,p.price,picture,created,cache_companyname as companyname FROM pb_products p WHERE p.industry_id1=729 ORDER BY rand() LIMIT 10;这个industry_id1是个索引,如果不加这个索引的话更慢
10来分钟去了
大家知道在类似这样的海量数据中,有什么办法可以取得随机数据呢?
10来分钟去了
大家知道在类似这样的海量数据中,有什么办法可以取得随机数据呢?
--原因:
mysql要把所有的记录都读入内存里面去,在那里按随机顺序对他们进行排序,而这一切都为了选取一条记录。。
不过只能做到随机取一条~~ 你的需求是10条~ 下面的方法可以保证一条随机后 下面9条会跟着那条随机1.给表加个随机列
alter table tbName add colName double;
2.给列加索引
create index indexName on tbName(colName);
3.给列加个随机值
update tbName set colName=rand();
4.接着你就可以使用啦
select top 10 * from tbName where colName>rand() order by colName limit 10记住上面这个方法比较适用为limit 1
因为你找到第一个后 后面9条石跟着你的第一条的 不算真正意义上的随机 》。
innodb 建立索引 industry_id1
myisam 建立复合索引 (industry_id1,id)SELECT p.id as productid,p.id,p.name as productname,p.clicked AS hits,p.name,p.price,picture,created,cache_companyname as companyname FROM pb_products p inner join (select id from pb_products WHERE industry_id1=729 ORDER BY rand() LIMIT 10) as p1 on p.id=p2.id;
建立一个字段,在此字段上建立索引 ,替换为RAND,再查询
厉害!
首先第一步:用程序来获取一个随机数。
$id=rand(1,1000000-10); 1000000-10是因为如果rand值得到的是10000000的话,可能就获取不到数据了。这样的话我们写sql语句就可以很轻松的实现了
select id,uid,content from Table where uid=58 and id>'$id' limit 10
我那时答是 先php 随机产生10个数 再 or id=*
是要怎么取才最快?