程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> Sqlserver中百萬數據隨機提取的問題

Sqlserver中百萬數據隨機提取的問題

編輯:關於SqlServer

  這個問題來自論壇提問。很多人都知道類似下面的語句

select top 2000 * from tb order by newid()
但是在海量數據下,它的性能是無法忍受的。這裡我用一個變通的辦法來實現性能的提升,思路為:表必須存在一個guid類型的主鍵或者索引列,然後用這個列去like一個隨機字符串,隨機字符串必須為guid規定的字符集合(數字+A到Z)。下面例子只用到了數字,並且只用了4個數字來匹配,你可以更改like後面的語句來調整這個策略。

--生成測試環境
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語句是有效的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved