聚集索引与非聚集索引及其查询效率
在以下的文章中,我将以“办公自动化”系统为例,探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页。以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构:
4aE
MK}2v5Y3@$D.@2D0
&UH%M#G[d0CREATE TABLE [dbo].[TGongwen] ( --TGongwen是红头文件表名ITPUB个人空间e"xZ|%Z"n\+w
ITPUB个人空间wd,?;g#sK
[Gid] [int] IDENTITY (1, 1) NOT NULL ,
]C(u qF2T0--本表的id号,也是主键ITPUB个人空间r P"ab%TJS)S7z
ITPUB个人空间 _Zodi4z*p
[title] [varchar] (80) COLLATE Chinese_PRC_CI_AS NULL ,ITPUB个人空间'_9c
S
Kd8un
--红头文件的标题ITPUB个人空间'_(l2{vU8[
ITPUB个人空间^
y;I}
o+LJ
[fariqi] [datetime] NULL ,
7C5ZF$l
Cb0--发布日期ITPUB个人空间 _z |v,N5W
"ft} |2O0C+fb6a0[neibuYonghu] [varchar] (70) COLLATE Chinese_PRC_CI_AS NULL ,ITPUB个人空间XM(?-}3o
--发布用户ITPUB个人空间B
Ev2\y/L!Z5|2F!{3H
ITPUB个人空间N'r;Nz Bb-]+Bl
[reader] [varchar] (900) COLLATE Chinese_PRC_CI_AS NULL ,ITPUB个人空间p$g)MvM
ITPUB个人空间
b2ib1c UuP
--需要浏览的用户。每个用户中间用分隔符“,”分开
!ir'~$B"Tws:f0ITPUB个人空间K s+w,Nc^T
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
k"jvk
He0
K.q6RN H0GOITPUB个人空间+\6H^1VZg
%m9p
{N.z1YY0
)}$Y HNn0K0M0
%@BqF8P\uu0下面,我们来往数据库中添加1000万条数据:ITPUB个人空间[6b_*Q
v*I
|$s9K/Hd
Lb U)Jg0declare @i int
f/J[:{+q i SD0ITPUB个人空间~5k;uO9yNhhX
set @i=1
Uv5H2[Oh7@u'e0
$_!f` n7aI9w`@R0while @i<=250000ITPUB个人空间2n0GRT#ye:Sk
ITPUB个人空间hM,|V2L S
beginITPUB个人空间*u?a4L&jc2}
ITPUB个人空间:asIMK?(N
insert into Tgongwen(fariqi,neibuyonghu,reader,title) values('2004-2-5','通信科','通信科,办公室,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,治安支队,外事科','这是最先的25万条记录')
7Pew\
vTH'V0
o.Y)gQGx(m6ZT+n0set @i=@i+1ITPUB个人空间O0_`$_Z'EbE*[
ITPUB个人空间R5o0H*h
u7pw/S
end
O/h4O'u%x_3s6m3U@0E0ITPUB个人空间,] L#R~0sR6W
GOITPUB个人空间KD'? ~(j3~T:wL
:n8|'K| U0declare @i intITPUB个人空间$XD
`#b-d%J$O2H
]HC"TE7k$kI0set @i=1ITPUB个人空间O:Xn3@YRP
I
H
WM/K
ITPUB个人空间]^"e%J5ZE&S%M
while @i<=250000ITPUB个人空间S:@&|fBsNtt
ITPUB个人空间T#q"}(uO\ixoD
begin
&DrV)z6Ms?0ITPUB个人空间)}Z|At[C1z
insert into Tgongwen(fariqi,neibuyonghu,reader,title) values('2004-9-16','办公室','办公室,通信科,王局长,刘局长,张局长,admin,刑侦支队,特勤支队,交巡警支队,经侦支队,户政科,外事科','这是中间的25万条记录')ITPUB个人空间&jW|.@%BC1eos
:n$W"F+a/@L0set @i=@i+1
#D&l
{%X/Qf0
p/\O%}l:p"s
H0end
&Gm*~z7a*C"elJ8S0ITPUB个人空间C `4Lnj8n/D-T
GO
-C$di8^?.DO U+x0
Y8sf"`S0
(GB6M(g*OA(A*rGK]0ITPUB个人空间'G u.K/E
Pi4b#Eo
declare @h int
$QfUD i'e+ky0
!pM8oV!yqq2Fs]cV0set @h=1
n6tJ^$]Ztd;J0ITPUB个人空间N&vU.T/E
while @h<=100
4Hra:Oz5N1I2{0
1viX%N&[%Q5Q0begin
!S6U*H6B"pV+m)L0
L,M)Y-CzQ-A@8x0declare @i int
w^+O4s$m"f0
};d1]5^Xl%olw
o^0set @i=2002ITPUB个人空间2m2f:syd*Y
ITPUB个人空间A'|)T-XcP7n
i]4G
while @i<=2003ITPUB个人空间baz$Ev w9M;d{
ITPUB个人空间^IP _{4nT |sV
begin
lC@wht0ITPUB个人空间lQ0LqC
declare @j intITPUB个人空间?
Wzh-h*}$H