weidagang2046的專欄

          物格而后知致
          隨筆 - 8, 文章 - 409, 評論 - 101, 引用 - 0
          數(shù)據(jù)加載中……

          海量數(shù)據(jù)庫的查詢優(yōu)化及分頁算法方案

          在以下的文章中,我將以“辦公自動化”系統(tǒng)為例,探討如何在有著1000萬條數(shù)據(jù)的MS SQL SERVER數(shù)據(jù)庫中實現(xiàn)快速的數(shù)據(jù)提取和數(shù)據(jù)分頁。以下代碼說明了我們實例中數(shù)據(jù)庫的“紅頭文件”一表的部分?jǐn)?shù)據(jù)結(jié)構(gòu):

          CREATE TABLE [dbo].[TGongwen] (??? --TGongwen是紅頭文件表名

          ?? [Gid] [int] IDENTITY (1, 1) NOT NULL ,
          --本表的id號,也是主鍵

          ?? [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 ,

          --需要瀏覽的用戶。每個用戶中間用分隔符“,”分開

          ) 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,刑偵支隊,特勤支隊,交巡警支隊,經(jīng)偵支隊,戶政科,治安支隊,外事科','這是最先的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,刑偵支隊,特勤支隊,交巡警支隊,經(jīng)偵支隊,戶政科,外事科','這是中間的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,刑偵支隊,特勤支隊,交巡警支隊,經(jīng)偵支隊,戶政科,外事科','這是最后的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,刑偵支隊,特勤支隊,交巡警支隊,經(jīng)偵支隊,戶政科,治安支隊,外事科','這是最后添加的900萬條記錄')

          ??? set @i=@i+1000000

          end

          GO

            通過以上語句,我們創(chuàng)建了25萬條由通信科于2004年2月5日發(fā)布的記錄,25萬條由辦公室于2004年9月6日發(fā)布的記錄,2002年和2003年各100個2500條相同日期、不同分秒的由通信科發(fā)布的記錄(共50萬條),還有由通信科于2004年5月5日發(fā)布的900萬條記錄,合計1000萬條。

          from: http://www.pconline.com.cn/pcedu/empolder/db/sql/0501/538958.html

          posted on 2006-10-27 12:17 weidagang2046 閱讀(270) 評論(0)  編輯  收藏 所屬分類: Database

          主站蜘蛛池模板: 襄垣县| 都安| 崇礼县| 汝城县| 兴文县| 稷山县| 南陵县| 平南县| 龙井市| 宣汉县| 绥阳县| 彰化市| 沭阳县| 南安市| 贵南县| 伊宁市| 前郭尔| 张家口市| 东兰县| 洛宁县| 白水县| 和平县| 那曲县| 大英县| 开封县| 翁源县| 白水县| 綦江县| 台江县| 辉县市| 陈巴尔虎旗| 长沙市| 望江县| 青川县| 绥阳县| 阿坝| 遵化市| 横峰县| 布拖县| 榆中县| 卓尼县|