SQL Server 随机取数
鉴于楼上发现的例外情况,于是搜索查阅资料,进行情况了解、研究后,发现:
1.表的数据量越大时,查询的性能会降低、耗时增加;
2.与聚集、非聚集索引的关系不大,但查询的列数越多,查询的性能会降低、耗时增加;
基于这两点发现,认为:
1.当表的数据量不是很大、且查询列数较少(即查询性能较优)时,可使用 order by newid(),支持点:写法简捷等;
例:(其中表来源于 [10.200.0.90].[LTERPCST_Normal].[dbo].[CST_ProdItemizeAccount])
select top 10 Guid from CST_ProdItemizeAccount order by newid()
2.而当性能影响较大时,推荐使用 tablesample(number [rows|percent]) 方式,该方式的更多资料请上网查阅;
例:
create table #temp(Guid varchar(50),PtnField datetime,ProdSort varchar(50),ProdGuid varchar(50),ProdBatch varchar(100),CostItemSort varchar(50),CostItemName varchar(50));
declare @i int;
set @i=0;
while @i<10
begin
insert #temp (Guid, PtnField, ProdSort, ProdGuid, ProdBatch, CostItemSort, CostItemName)
(select top 1 Guid, PtnField, ProdSort, ProdGuid, ProdBatch, CostItemSort, CostItemName
from CST_ProdItemizeAccount
tablesample(1000 rows))--或写为:tablesample(0.001 percent),其中1000不宜较小、0.001不宜较大
select @i=count(*) from #temp
end
select * from #temp
drop table #temp
PS:若还有其他的疑点、或技术知识点,请多多提出、让我们大家一起探讨交流!