fromcustomerwherezipcodelike“21___”,即使在zipcode字段上已建立了索引,在这种情况下也可能还是采用全表扫描方式。如果把语句改为:selectfromcustomerwherezipcode“21000”,在执行查询时就会利用索引,大大提高速度。但这种变通是有限制的,不应引起业务意义上的损失,对于邮政编码而言,zipcodelike“21___”和zipcode“21000”意义是完全一致的。9、组合索引的高效使用假设已在date,place,amou
t三个字段上建立了组合索引selectcou
tfromrecordwheredate′19991201′a
ddate′19991214′a
damou
t20001秒
selectdatesumamou
tfromrecordgroupbydate(11秒)
selectcou
tfromrecordwheredate′19990901′a
dplacei
′BJ′′SH′
f(1秒)这是一个设置较合理的组合索引。它将date作为前导列,使每个SQL都可以利用索引,并且在第一和第三个SQL中形成了索引覆盖,因而性能达到了最优。如果索引不便于更改,修正SQL中的条件顺序以配合索引顺序也是可行的。10、orderby按聚集索引列排序效率最高排序是较耗时的操作,应尽量简化或避免对大型表进行排序,如缩小排序的列的范围,只在有索引的列上排序等等。我们来看:(gid是主键,fariqi是聚合索引列)selecttop10000gidfariqireadertitlefromtgo
gwe
用时:196毫秒。扫描计数1,逻辑读289次,物理读1次,预读1527次。selecttop10000gidfariqireadertitlefromtgo
gwe
orderbygidasc用时:4720毫秒。扫描计数1,逻辑读41956次,物理读0次,预读1287次。selecttop10000gidfariqireadertitlefromtgo
gwe
orderbygiddesc用时:4736毫秒。扫描计数1,逻辑读55350次,物理读10次,预读775次。selecttop10000gidfariqireadertitlefromtgo
gwe
orderbyfariqiasc用时:173毫秒。扫描计数1,逻辑读290次,物理读0次,预读0次。selecttop10000gidfariqireadertitlefromtgo
gwe
orderbyfariqidesc用时:156毫秒。扫描计数1,逻辑读289次,物理读0次,预读0次。从以上我们可以看出,不排序的速度以及逻辑读次数都是和“orderby聚集索引列”的速度是相当的,但这些都比“orderby非聚集索引列”的查询速度是快得多的。同时,按照某个字段进行排序的时候,无论是正序还是倒序,速度是基本相当的。三、关于节省数据查询系统开销方面的措施1、使用TOP尽量减少取出的数据量TOP是SQLSERVER中用来提取前几条或前某个百分比数据的关键词。selecttop20gidfariqireadertitlefromtgo
gwe
orderbygiddescselecttop60perce
tgidfariqireadertitlefromtgo
gwe
orderbygiddesc在实际的应用中,应该经常利用top剔除掉r