在以下的文章中,我將以“辦公自動化”系統為例,探討如何在有著1000萬條數據的MS SQL SERVER數據庫中實現快速的數據提取和數據分頁。以下代碼說明了我們實例中數據庫的“紅頭文件”一表的部分數據結構:
CREATE TABLE [dbo].[TGongwen] (??? --TGongwen是紅頭文件表名
?? [Gid] [int] IDENTITY (1, 1) NOT NULL ,
--本表的id號,也是主鍵
?? [title] [varchar] (80) COLLATE Chinese_PRC_CI_AS NULL ,?
--紅頭文件的標題
?? [fariqi] [datetime] NULL ,
--發布日期
?? [neibuYonghu] [varchar] (70) COLLATE Chinese_PRC_CI_AS NULL ,
--發布用戶
?? [reader] [varchar] (900) COLLATE Chinese_PRC_CI_AS NULL ,
--需要瀏覽的用戶。每個用戶中間用分隔符“,”分開
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
下面,我們來往數據庫中添加1000萬條數據:
declare @i int
set @i=1
while @i<=250000
begin
??? insert into Tgongwen(fariqi,neibuyonghu,reader,title) values('2004-2-5','通信科','通信科,辦公室,王局長,劉局長,張局長,admin,刑偵支隊,特勤支隊,交巡警支隊,經偵支隊,戶政科,治安支隊,外事科','這是最先的25萬條記錄')
??? set @i=@i+1
end
GO
?
declare @i int
set @i=1
while @i<=250000
begin
??? insert into Tgongwen(fariqi,neibuyonghu,reader,title) values('2004-9-16','辦公室','辦公室,通信科,王局長,劉局長,張局長,admin,刑偵支隊,特勤支隊,交巡警支隊,經偵支隊,戶政科,外事科','這是中間的25萬條記錄')
??? set @i=@i+1
end
GO
?
declare @h int
set @h=1
while @h<=100
begin
declare @i int
set @i=2002
while @i<=2003
begin
declare @j int
??????? set @j=0
??????? while @j<50
??????????? begin
declare @k int
??????????? set @k=0
??????????? while @k<50
??????????? begin
??? insert into Tgongwen(fariqi,neibuyonghu,reader,title) values(cast(@i as varchar(4))+'-8-15 3:'+cast(@j as varchar(2))+':'+cast(@j as varchar(2)),'通信科','辦公室,通信科,王局長,劉局長,張局長,admin,刑偵支隊,特勤支隊,交巡警支隊,經偵支隊,戶政科,外事科','這是最后的50萬條記錄')
??????????? set @k=@k+1
??????????? end
set @j=@j+1
??????? end
set @i=@i+1
end
set @h=@h+1
end
GO
?
declare @i int
set @i=1
while @i<=9000000
begin
??? insert into Tgongwen(fariqi,neibuyonghu,reader,title) values('2004-5-5','通信科','通信科,辦公室,王局長,劉局長,張局長,admin,刑偵支隊,特勤支隊,交巡警支隊,經偵支隊,戶政科,治安支隊,外事科','這是最后添加的900萬條記錄')
??? set @i=@i+1000000
end
GO
通過以上語句,我們創建了25萬條由通信科于2004年2月5日發布的記錄,25萬條由辦公室于2004年9月6日發布的記錄,2002年和2003年各100個2500條相同日期、不同分秒的由通信科發布的記錄(共50萬條),還有由通信科于2004年5月5日發布的900萬條記錄,合計1000萬條。
from: http://www.pconline.com.cn/pcedu/empolder/db/sql/0501/538958.html