合理创建索引 实现数据库访问的优化
2013-09-13赵爱涛
赵爱涛
(石家庄职业技术学院 信息工程系,河北 石家庄 050081)
数据库技术在计算机应用系统开发中占有重要的地位.数据查询的效率直接影响着应用系统的执行效率.索引是对数据库表中一列或多列的值进行排序的一种结构,利用索引可快速访问数据库表中的特定信息,提高数据库的查询效率,从而大幅度提高系统的性能[1].在数据库中,索引分为聚簇索引和非聚簇索引.聚簇索引以数据存放的物理位置为顺序,在一个数据库表中只能建立一个聚簇索引.对于非聚簇索引,它所记录的逻辑顺序与物理顺序间没有必然的联系,索引表中的记录顺序通常与实际记录的物理存储顺序不一致,在一个数据库表中可以建立多个非聚簇索引.在数据库设计中,优化与提高数据的查询效率有很多方面[2],本文从索引的创建方面测试、分析、总结并优化数据查询的方法.
1 数据库的测试环境
数据库服务器硬件配置如下:
CPU为Inter(R)Core(TM)2Duo CPU e7400@2.8GHz.
内存为2GB.
操作系统为Windows Server 2003.
数据库管理系统为Microsoft SQL Server 2008.
2 不同索引方案的查询测试
测试使用某系统中的“产品订货表”,该表已存储10 000 000条记录,结构如表1所示.
表1 测试数据库表结构
在系统的应用中,经常会用到以下三种查询语句:
本文设计了四种索引的建立方案,分别是:
方案P1,仅为id列设置主关键字;
方案P2,在orderdate上设计一个聚簇索引;
方案P3,在place,orderdate,amount上设计组合索引;
方案P4,在orderdate,place,amount上设计组合索引.
对于每个方案,分别测试上述三条查询语句的执行时间,每个方案的每条语句各执行三次,并计算各方案中语句执行的平均时间T(1,2,3)=[(t1+t2+t3)/3],时间的单位为 ms.测试结果见表2-表5.
表2 方案P1查询执行时间
表3 方案P2查询执行时间
表4 方案P3查询执行时间
表5 方案P4查询执行时间
3 测试分析
通过前文的测试,得到表6所示综合分析表和图1所示综合分析图.
表6 综合分析表
图1 综合分析图
在方案P1中只建立了主键索引,而在三个查询句中都没有涉及到主键id列,因此,利用方案P1查询数据时并没有利用到索引;方案P2在orderdate列上建立了一个聚簇索引,记录数据在物理上是按顺序存放的,因此,在查找时,可以先找到这个范围的起止点,并只在此范围内扫描数据,这就避免了大范围扫描,从而提高了数据的查询效率;方案P3是建立在place,orderdate,amount上的组合索引,其前导列是place,但是语句L1和语句L2都没有引用place,在执行时并没有利用到索引,而语句L3引用了place,并且引用的所有列都包含在组合索引中,形成了索引覆盖,因此它的执行效率得到了明显提升;方案P4是建立在orderdate,place,amount上的组合索引,它将orderdate作为前导列,使三个语句都可以利用索引,并且在L1和L3中形成了索引覆盖,因而性能达到了最优.
通过以上的测试与分析可知,在数据库的设计中,索引的设计应建立在对各种查询的分析和预测上.一般来说应注意以下几个方面:(1)有大量重复值且经常有范围查询(between,?>,< ?,> =,< ?=)和order by,group by发生的列,可建立聚簇索引.(2)经常同时存取多列,且每列都含有重复值时可考虑建立组合索引.(3)组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列.(4)聚簇索引要建立在查询时最频繁引用的、最需要排序的字段之上.
4 结束语
创建索引合理,可以有效地提高数据库的查询效率.在一个数据表中虽然可以创建多个索引,但过多的索引会降低系统的维护效率,增大数据的空间需求,降低系统的修改性能[3].在实际应用时,应根据系统的实际情况,权衡修改性能和检索性能的需求,选用合理的索引策略.
[1]孟英杰,曲晶晶.数据库查询优化技术的研究 [J].才智,2011,(25):72.
[2]高爱梅.浅谈数据库查询优化 [J].内蒙古科技与经济,2010,(20):128.
[3]朱东.基于SQL Server的查询优化 [J].信息与电脑:理论版,2011,(11):178.