数据库的查询优化及分页算法方案.doc
文本预览下载声明
海量数据库的 查询优化及分页算法方案
字体大小: 小 中 大
随着“金盾工程”建设的逐步深入和公安信息化的高速发展,公安计算机应用系统被广泛应用在各警种、各部门。与此同时,应用系统体系的核心、系统数据的存放地――数据库也随着实际应用而急剧膨胀,一些大规模的系统,如人口系统的数据甚至超过了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 intset @i=1while @i=250000begininsert into Tgongwen(fariqi,neibuyonghu,reader,title) values(2004-2-5,通信科,通信科,办公室,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,治安支队,外事科,这是最先的25万条记录)set @i=@i+1endGOdeclare @i intset @i=1while @i=250000begininsert into Tgongwen(fariqi,neibuyonghu,reader,title) values(2004-9-16,办公室,办公室,通信科,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,外事科,这是中间的25万条记录)set @i=@i+1endGOdeclare @h intset @h=1while @h=100begindeclare @i intset @i=2002while @i=2003begindeclare @j intset @j=0while @j50begindeclare @k intset @k=0while @k50begininsert 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+1endset @j=@j+1endset @i=@i+1endset @h=@h+1endGOdeclare @i intset @i=1while @i=9000000begininsert into Tgongwen(fariqi,neibuyonghu,reader,title) values(2004-5-5,通信科,通信科,办公室,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,治安支队,外事科,这是最后添加的900万条记录)set @i=@i+1000000endGO通过以上语句,我们创建了25万条由通信科于2004年2月5日发布的记录,25万条由办公室于2004年9月6日发布的记录,2002年和2003年各100个2500
显示全部