海量数据随机提取10行的最快方法
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
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读