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