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来分钟去了
大家知道在类似这样的海量数据中,有什么办法可以取得随机数据呢?
解决方案 »
- 触发器执行顺序问题
- 如何用一条语句查出想要的数据
- LINUX下面装了二个MYSQL,怎么设置默认MYSQL地址?
- mysql如何同步表
- HI,pls help !怎末样将fsm.java 文件 outpout Value 指 传 到 mysql数巨库,80 mark!
- mysql中的临时表能不能取代其他数据库中的view?
- 装了MYSQL5.0用MYSQLFRONT就不能连接了吗?
- 急问:MFC下如何连接MySql数据库(在线等待,谢谢)
- 存储过程where条件调用变量问题
- 游标遍历 但是后面处理逻辑有一个sql查询没值导致遍历结束
- 请问下如何求两段时间的交集
- 关于IN,EXISTS的使用问题,请教了
--原因:
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=*
是要怎么取才最快?