表中有500万条记录,要求随机选择1000条,使用order by newID,结果速度非常慢,要5分钟!请高手解决!100分,在线等 用order by本來就是速度變慢的,而且你的數據量太大了,所以我覺得你的表中應該要用到的字段才列出來,不應該用*來代替 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to 海洋空间:我只选择其中的PK字段就可以了,没有用*to陈良灯:具体点,不明白。 首先要在数据表中 建立 自动递增的 长整数字段 NID 并设置索引查询时 编写一个 过程 传递 需要选取的记录个数 如10001.产生 1 个随机数 RND 范围 从 1 - 数据表的记录总数并不重复2.select * into 新表 from 源表 Where NID=随机数循环以上过程直到到达所需 记录数3.select * from 新表 就是所需的随机记录提升效率的关键:避免在全表中作排序操作 1. order by 耗时2. newid() 也耗时所以加起来速度就当然慢了 用 zlt982001(zhangle) 说的随机数是一个不错的办法,这样不需要排序只是随机性差一点 zlt982001(zhangle)的办法是提高了速度,但需要新增一个字段,楼主能不能把表结构贴出来,看看有没有什么其他办法 order by newID()其实会先生成个中间表,再从中间表里面读取数据返回结果~~~这样的话,表记录很大时,就不适宜用 order by newid()了 你表有标识列ID,可以结合rand函数来实行列ID取随机记录 求一SQL語句 求能输入值为null的触发器 求助SQL语句,在线等 请教邮箱数据库设计问题 问个e-r关系的问题 SQL SERVER 2005 游标问题 Mysql 过程书写while 循环 求两表连接,一个表中数据相应在另一个表中最大值的sql 如何连接 SQL Server 一个严重的问题??? 求助一个很困难的sql语句,或者是实现方法 改变表中字段顺序的问题??
我只选择其中的PK字段就可以了,没有用*to陈良灯:
具体点,不明白。
查询时 编写一个 过程 传递 需要选取的记录个数 如1000
1.产生 1 个随机数 RND 范围 从 1 - 数据表的记录总数并不重复
2.select * into 新表 from 源表 Where NID=随机数
循环以上过程直到到达所需 记录数
3.select * from 新表 就是所需的随机记录提升效率的关键:避免在全表中作排序操作
2. newid() 也耗时所以加起来速度就当然慢了
只是随机性差一点
楼主能不能把表结构贴出来,看看有没有什么其他办法
其实会先生成个中间表,再从中间表里面读取数据返回结果~~~这样的话,表记录很大时,就不适宜用 order by newid()了