首页 新闻 赞助 找找看

求SQL高效的获取几条随机记录解决方案

0
悬赏园豆:20 [已关闭问题]

设表A中有大量数据(id为主键但不连号),现要求在A表中随机取出100条数据。

SELECT TOP 100 * FROM A ORDER BY NEWID()此方法感觉太慢了,因为它进行了全表扫描

现求各位大佬们亮出你们的高见!

eng308的主页 eng308 | 菜鸟二级 | 园豆:250
提问于:2010-07-26 15:03
< >
分享
其他回答(2)
0

把数据取出来,用集合里面随机抽取!

xluo | 园豆:94 (初学一级) | 2010-07-26 16:12
你这还不如用order by newid()呢,且不说其他的,最起码它省去了整表的数据传输过程。
支持(0) 反对(0) eng308 | 园豆:250 (菜鸟二级) | 2010-07-26 16:48
一个建议,最好不好在SQL里面进行运算,SQL负责取数据,程序负责加工处理。
支持(0) 反对(0) xluo | 园豆:94 (初学一级) | 2010-07-26 16:50
嗯,确实 不能让数据库的负载太大,要尽量减少它的压力 但是像你上面所说的那种方案你想想,如果数据量有1000W乃至更多,我只需要随机取100条你想想大概会用多久时间?不说把1000W都读出来放到程序用多久,你在查询分析器中直接运行select * from A就得不少时间
支持(0) 反对(0) eng308 | 园豆:250 (菜鸟二级) | 2010-07-26 17:14
顶! xluo 随机生成100个数字 取大于数字的第一条 用in 就搞定了
支持(0) 反对(0) 流浪2011 | 园豆:3 (初学一级) | 2010-07-27 15:32
0

需要你提供额外信息,就是你的表里面对哪些字段做了索引,要查询高效必须抓住索引这条线,否则如何快速取出指定位置的数据就是无法逾越的障碍

dege301 | 园豆:2825 (老鸟四级) | 2010-07-26 17:48
对,我也是这么觉得,要想高效就必须得充分利用索引 在此表A中,id为索引列
支持(0) 反对(0) eng308 | 园豆:250 (菜鸟二级) | 2010-07-26 17:58
@eng308:那这个问题我觉得可以通过一个循环来实现,在循环里面通过随机函数构造出ID,然后去取这条记录,一直循环到达到指定记录数为止。
支持(0) 反对(0) dege301 | 园豆:2825 (老鸟四级) | 2010-07-26 20:11
0

先用随机函数产生ID,列表中有就取出来。

代码苦行僧 | 园豆:311 (菜鸟二级) | 2010-07-26 22:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册