拼吾爱程序人生

首页 » 数据库编程 » SQL » 海量数据库的查询优化及分页算法方案
Systemjudge - 2007-8-6 16:50:00
随着“金盾工程”建设的逐步深入和公安信息化的高速发展,公安计算机应用系统被广泛应用在各警种、各部门。与此同时,应用系统体系的核心、系统数据的存放地――数据库也随着实际应用而急剧膨胀,一些大规模的系统,如人口系统的数据甚至超过了1000万条,可谓海量。
 
   
   
   
 
 
   
   
     
       
         
       
     
     
   
 
 
   
   
   
 
那么,如何实现快速地从这些超大容量的数据库中提取数据(查询)、分析、统计以及提取数据后进行数据分页已成为各地系统管理员和数据库管理员亟待解决的难题。    在以下的文章中,我将以“办公自动化”系统为例,探讨如何在有着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万条。

 您可能对 [SQL] 的这些文章也感兴趣:

ASA:如何根据系统表查数据库中的表和列的信息
详解微软SQL 2005的安全策略
SQL日志文件过大问题的解决方法
SQL数据库攻击详解
SQL7数据库的存储引擎
SQL数据语言的快速入门之一
Sql语句密码验证安全漏洞
使用SQLJ编写存储过程
SQL语言快速入门之二
SQL7.0储存过程调试
SQL语言快速入门之一
整理的一些常用系统表
1
查看完整版本: 海量数据库的查询优化及分页算法方案
Modify by pin5i DZNT_ExpandPackage 2.1.3293 2007-2009 pin5i.com
 Total Unique Visitors: