首页  ·  知识 ·  数据库
海量数据随机提取10行的最快方法
不详    MS-SQL  编辑:德仔   图片来源:网络
set nocount on --75151448行数据 select count(*) from syscolumns a,syscolumns b,syscolumns c set statistics time on select top 10 *
set nocount on --75151448行数据 select count(*) from syscolumns a,syscolumns b,syscolumns c set statistics time on select top 10 * from( select a.name as name,left(b.name,10) as name1, checksum(newid()) as hash from syscolumns a,syscolumns b,syscolumns c )t where hash%100=0 set statistics time off set nocount off SQL Server 执行时间: CPU 时间 = 0 毫秒,占用时间 = 8 毫秒。 够快吧:p SQL Server 执行时间: CPU 时间 = 16 毫秒,占用时间 = 4 毫秒。 这么bt?不过仔细一看是唬人的,这个是伪随机,后面数百万的大部分数据是一辈子都不会有机会显示的。但这是一个思路,where hash%100=0 这句话当中的100是个关键的因素。 hash%700000,同样的机器需要20秒,如果是hash%70000则是2秒,可以看出这基 本是个线性关系。 要做真随机还是要高昂代价,用7000000来做种子。 SQL Server 执行时间: CPU 时间 = 173531 毫秒,占用时间 = 174537 毫秒。 用order by newid()是 SQL Server 执行时间: CPU 时间 = 180844 毫秒,占用时间 = 182779 毫秒。 看来全表扫描的本质都是一样的,区别就是这个可以伪随机.. 本文作者:不详 来源:网络
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读