Sqlserver中百万数据随机提取的问题

2016-02-19 16:03 71 1 收藏

下面这个Sqlserver中百万数据随机提取的问题教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!

【 tulaoshi.com - 编程语言 】

  这个问题来自论坛提问。很多人都知道类似下面的语句

select top 2000 * from tb order by newid()
但是在海量数据下,它的性能是无法忍受的。这里我用一个变通的办法来实现性能的提升,思路为:表必须存在一个guid类型的主键或者索引列,然后用这个列去like一个随机字符串,随机字符串必须为guid规定的字符集合(数字+A到Z)。下面例子只用到了数字,并且只用了4个数字来匹配,你可以更改like后面的语句来调整这个策略。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

--生成测试环境
use master
go
create table test(id uniqueidentifier,name varchar(100))
insert into test select newid(),name from syscolumns
--随机提取
select top 10 * from test where id like
char(48+abs(checksum(newid())%10))+ '%'+
char(48+abs(checksum(newid())%10))+ '%'+
char(48+abs(checksum(newid())%10))+ '%'+
char(48+abs(checksum(newid())%10))+'%'
--删除测试环境
drop table test
我测试了300万数据提取2000条,耗时大约1秒左右。另外提醒一点,索引对like语句是有效的。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1610985.html

延伸阅读
比如获取每个表的前10%个字段。 代码如下: select id , name , colid , rn from ( select * , rn = ntile (10 ) over (partition by id order by colorder ) from syscolumns )t where rn = 1
标签: SQLServer
经过测试,可以顺利实现 数据库 结构的初始化和数据的单向同步(也就是订阅服务器的数据可以及时更新为发布服务器的数据)。 准备工作:  数据的同步中主要考虑的三部分,可以理解成三台主机。发布服务器,分发服务器和订阅服务器;可以从字面的意思理解,要实现的功能实际就是让订阅服务器通过分发服务器保持数据及时地和发布服务器上的数...
 在软件开发过程中经常会遇到数据库升迁的问题,原因比较多,如acsess访问速度比sql server慢、删除数据记录后access会留下空档,文件越来越大(也可用压缩修复的方式减小文件大小,但太麻烦),访问速度越来越慢,甚至会数据库损坏,损坏得比较轻的可以找第三方工具来修复,便严重时会导致数据库无法修复,或修复后数据记录会损坏。所以我们...
标签: 美容 美容方法
肌肤总是有这样那样的问题,只有正确的了解问题的起因,才能根本的解决问题的来源,图老师图老师小编搜罗了一些mm比较在意的问题和解决办法,不妨来参考一下! 1.怎Tulaoshi.Com样处理混合型皮肤?我的面颊很干,t部位很油,用润肤霜容易起面疱? 首先用温和的洗面膏把脸洗干净,用化妆棉沾取含有水杨酸或乙醇酸的收缩水擦拭面部干燥...
   declare @i  int    set @i='a'    set @i=cast('a' as int)    set @i=convert(int, 'a')    print @i                           &n...

经验教程

218

收藏

40
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部