weidagang2046的專欄

          物格而后知致
          隨筆 - 8, 文章 - 409, 評(píng)論 - 101, 引用 - 0

          導(dǎo)航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(12)

          隨筆檔案(8)

          文章分類(421)

          文章檔案(409)

          相冊(cè)

          Link

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

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

          在以下的文章中,我將以“辦公自動(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

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

          主站蜘蛛池模板: 新津县| 木里| 新密市| 琼海市| 平顺县| 彰化县| 乌海市| 泽普县| 龙川县| 保定市| 台山市| 和平区| 宜黄县| 大埔县| 巴林左旗| 贺州市| 拉孜县| 定西市| 阜新| 收藏| 阿瓦提县| 徐汇区| 余姚市| 嫩江县| 永昌县| 富民县| 青川县| 临颍县| 清水河县| 彰化县| 平南县| 昌图县| 罗平县| 嘉祥县| 弥渡县| 屏东县| 安泽县| 翁源县| 孟连| 合肥市| 安远县|