Chinaunix

标题: 谁有从40万条数据中随机取30条最佳方式? [打印本页]

作者: netxiao2005    时间: 2009-08-31 16:29
标题: 谁有从40万条数据中随机取30条最佳方式?
谁有从40万条数据中随机取30条最佳方式?  试过N种,始终找不到满意的方式.
作者: cenalulu    时间: 2009-08-31 16:46
你的表结构和索引分布情况是怎样的?
作者: netxiao2005    时间: 2009-08-31 17:06
都在一个表里,索引没问题的.
作者: cenalulu    时间: 2009-08-31 17:22
原帖由 netxiao2005 于 2009-8-31 17:06 发表
都在一个表里,索引没问题的.


晕。。。
根据你的描述来看,估计你试过了 order by rand() limit 10这种方式。

为什么我要问你表结构和索引情况:
假设你有个自增id列,并且有索引,那么可以现生成10个随机的id,然后select in 这样可以避免全表读取。
假设你没有自增的id,而是一个没有规律的int主键,那么你可以先 select pri_key from xxx order by rand() limit 10,然后再和原表去结合。
等等。。。各种情况

所以先明确你的需求,不要让别人去猜你的需求和现状。
作者: netxiao2005    时间: 2009-08-31 17:46
标题: 你说的方法我早都试过了啊:) 国内国外的资料都翻遍了.
算了,算是我的牢骚贴了,对Mysql严重不爽的一个发泄吧. 谢谢你的回复喔~~~
作者: Coolriver    时间: 2009-08-31 21:34
看来楼主也是做过功课的,即然这样的方法不行。有没有想过别的方法呢?
例如:如果有唯一索引只取这个索引的40W的数据在程序层取出随机10个。
业务特殊了,可以走专用的一个DB(Slave)不影响现网业务的情况下,在那个Slave做一些特殊的操作。

方法很多的,关建看自已对那里熟悉了。所以怎么做,还是有LZ决定的。
作者: netxiao2005    时间: 2009-09-01 10:41
标题: 谢谢喔~~~
我会试的,
作者: deluxe1983    时间: 2009-09-01 15:16
平时都是直接在slave上order by rand(),还真没去好好想最佳方式这个问题...




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2