本文是根据 海量数据库的 查询优化及分页算法方案 做的实验,不知为何,同样的数据量时间却比原文少了将近百倍,由于插入数据耗时时间过长,所以只能勉强得出结论,大致还是准确的,可适当增加数据
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]
GO
delete from TGongwen
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
DROP INDEX list1 ON TGongwen
--表扫描:发生于堆表,并且没有可用的索引可用时,会发生表扫描,表示整个表扫描一次,2953
select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi> '2002-8-16'
--聚集索引扫描:发生于聚集表,也相当于全表扫描操作,但在针对聚集列的条件如(WHERE Id > 10)等操作时,效率会较好,2854
CREATE CLUSTERED INDEX list1 ON TGongwen(Gid)
select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi> '2002-8-16'
--聚集索引查找,扫描聚集索引中特定范围的行.1476
CREATE CLUSTERED INDEX list1 ON TGongwen(fariqi)
select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi> '2002-8-16'
--索引扫描,能够覆盖所需要的数据。如果非聚集索引不能覆盖,使用聚集索引扫描。
CREATE INDEX list1 ON TGongwen(fariqi)
select fariqi from Tgongwen
select * from Tgongwen
如果没有聚集索引,使用表扫描