大型数据库SQL语言的性能分析

2013-04-29 18:55毛志东沈洋
网友世界 2013年23期
关键词:字段语句选择性

毛志东 沈洋

【摘 要】本文就大型数据库中常用的SQL语言进行性能上的分析,并从数据结构上给出其关键数据结构和关键算法上效率上的分析,从INSERT,DELETE,SELECT,UPDATE结合索引给出一般大型数据库的优化方法,并系统性的给出提高效率的具体方法。

在当前计算机应用系统中,大型数据库是信息系统的关键环节,是存储数据的必要手段,互联网上大多数应用数据存储在大型数据库中,因此,合理的掌握大型数据库的编程,是信息系统编程至关重要的环节。但是大型数据库的SQL语言使用,和一般的编程环节有较大的不同,这使得初级编程人员很难在短期内精通,并且难以编制高质量的代码[1]。

SQL语言编程与一般的语言编程有很大不同,SQL语言是过程式语言,强调对数据的操作,但是操作的方式与一般的数据操作相比又有很大不同,SQL语言是以数据库中的数据块为数据操作单位,因此,对于数据库来说,成批处理数据,比单独一条条处理数据有更高的效率,这就决定了SQL语言最好是以数据块的方式进行编程,而非逐条记录的方式处理数据的方式处理数据。此外,SQL语言是对数据块进行操作,需要大量的磁盘I/O操作,因此效率是SQL需要注意的关键问题,设计不佳的SQL语言,使得效率极为低下,不能满足信息系统的需要。

以下我们逐一分析SQL最常用的四种操作数据的方法SELECT,UPDATE,DELETE,INSERT的性能。

1.SELECT语句的效率受索引影响,索引对SELECT语句的效率起到了至关紧要重要的作用,在没有索引的情况下,SELECT语句使用全表扫描,也就是说,对于需要查找的记录,在全表范围内进行查找,因此,查询一条记录和查询所有记录的代价是相当的。在有索引时,SELECT语句的执行效率取决于WHERE条件与索引的配置,当WHERE条件中的搜索字段定义了索引时,SELECT语句可以利用索引进行记录定位,从而可以快速定位到相应记录。当SELECT语句中的条件和索引无关时,这时SELECT语句不能利用索引定位,因为仍然需要全表扫描。

2.UPDATE语句的效率和SELECT语句的性质相似,因此,UPDATE语句在执行大批量修改时,效率相当高,在对单条记录进行修改时,如果WHERE条件上没有索引,仍需要进行全表扫描,效率较低,但有索引时,会使用索引进行记录定位,UPDATE语句和SELECT語句的差别在于,UPDATE语句对字段进行修改,如果修改的字段上定义了索引时,UPDATE语句需要同时修改索引。

3.DELETE语句的效率和UPDATE语句极为相似,因此这二类语句同时可能涉及对索引的修改,执行的效率同样取决于WHERE条件上是否有相应的索引结构。

4.INSERT语句的效率在所有方法中是最高的,INSERT语句的插入方法取决于表的性质,当表是堆表时,INSERT语句总是将新记录插到最后面,因此不需要考虑其它代价,当数据表上定义了聚簇索引时,由于表中的记录会按聚簇索引的次序进行排列,因此插入时,会插入到表中的特定位置,当特定位置没有空间时,会将数据块分裂,从而保证记录在数据块上的有序性。

考虑到索引在大型数据库中的重要性,我们对索引进行分析,一般来说,索引可分为聚簇索引和非聚簇索引,聚簇索引的特点在于数据按索引的在数据块中物理顺序排放,非聚簇索引则没有此要求。一般来说,索引的结构是B+树,B+树由于其高效的动态查找性能,在数据库中应用广泛。

B+树的特点在于矮而粗,B+树由于矮小,因为查找的层次少,所以能实现极高的动态查找效率,但是B+树同样需要大量的存贮空间,此外B树只对选择性高的字段有效,选择性差的字段无效。

所谓索引字段的选择性,是指能否根据选定的值,快速定位到相应的字段,而选择性高的字段可以优先作为索引,选择性差的字段,不宜作为索引,例如,对于班级表而言,学号是选择性高的字段,可以根据特定的值找到相应的记录,但对于选择性差的字段,例如性别,当使用B+数对性别建立索引时,最多只能将记录分为二个分支“男”“女”,因此无法利用B树精确定位记录,因此,建立B树只能浪费空间,并不能提高效率。

此外,如果数据库中的索引建立不准确,SQL优化器可能不会使用定义的索引进行查找,因此索引必须有高选择性,而且经常被用于查找[4]。

SQL语句中,除了SELECT,INSERT,DELETE,UPDATE之外,关联运算也是极为重要的操作,数据库中的关联运算,如果完全按语义上执行,操作极为耗时,因此一般SQL使用优化器对之进行优化处理,对于关联语句关联的A,B表,如果B表在连接字段上定义了索引,那么,就可以先读取没有定义索引的A表,然后在A表的每个记录上,用索引去查找B表,从而得到关联结构。

因此,索引在关联运算中极为重要,是提高效率的有效手段,当二张表上没有定义索引时,SQL优化器往往会在某张表上建立临时索引,然后利用临时索引进行关联查找。

关联运算还和内存有关,如果缓冲内存够,那么,关联运算可以将表放在内存中进行关联,这显然大大增加了效率,而在内存很少时,只能逐一对表进行读取,并进行关联,效率明显下降。

此外,应用程序的合理编写,对SQL影响较大,而临时表技术,可以大幅提高程序效率,对于需要处理的数据,我们不直接在表上进行操作,而是将需要处理的数据,从大表中提取出来,放在临时表中,因为临时表中数据量较小,因此处理很快,这样避免了从大表中查找数据。

对于信息系统,在业务处理中,需要区分二类数据处理,一类是短事务处理,对于前台进行的操作,是短事务,需要尽快处理,因为需要很高的效率,而对于数据加工如记帐来说,是长事务,需要长时间的运行,在信息系统中,需要处理好二类不同的事务,才可能开发出良好的数据库应用程序。

参考文献:

[1]张水平.数据库原理及SQL Server应用[M].西安:西安交通大学出版社,2008.

[2]Abraham Silberschatz,Henry F.Korth,S.Sudarshan数据库系统概念(第3版)[M].北京:机械工业出版社,2008.

[3]Ramez Elmasri,(美)Shamkant B.Navathe.数据库系统基础.高级篇[M].北京:人民邮电出版社,2008.

[4]周辉君.数据库系统优化方法研究[J].科技信息,2008(17):70.

猜你喜欢
字段语句选择性
图书馆中文图书编目外包数据质量控制分析
重点:语句衔接
选择性听力
选择性应用固定物治疗浮膝损伤的疗效分析
选择性执法的成因及对策
铈基催化剂用于NH3选择性催化还原NOx的研究进展
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述
如何搞定语句衔接题
关于CNMARC的3--字段改革的必要性与可行性研究