李佳铁岭卫生职业学院信息技术教研室
谈SQL Server数据库的性能优化
李佳
铁岭卫生职业学院信息技术教研室
在当前这个数据化、信息化的时代下,数据信息的存储成为了一个关键的问题。由于数据信惠量的不断增多,以及数据信息之间的关系日益复杂,所以传统以人工的方式进行数据管理,在今天已经完全不使用,取而代之的是数据库来帮助人们进行数据信息的存储与管理。数据库最早出现在上世纪的五十年代早期,发展至今日,它已经得到了非常广泛的应用,而且相关的技术与理念较早期相比,也越来越成熟。在数据库的应用过程当中,必须要重视其性能的优化与发挥,这样才能提高数据库信息存储与管理的效率。本文基于作者自身对数据库的认识与应用经验,主要SQI Server数据库为例,对如何进行数据库性能优化提出了部分探讨性建议。
SQL Server 数据库性能优化
数据库是一种能够高效存储、管理、挖掘以及分享数据信息的软件,在当前这个数据化、信息化的时代下,各行各业都必须要应用到数据库, 因此研究与探讨如何提高数据库的性能就具有重要的作用有意义。
1.1 提升运行效率
之所以要采用数据库代替人工进行数据存储与管理,一个非常重要的原因就是数据越多,人工效率就越慢,而如今的数据又越来越多,所以人工数据管理的方式注定被淘汰。人们之所以选择数据库来代替人工进行数据管理,就是因为数据库的效率比人工高出很多,看中的就是数据库的效率。不过,如果对数据库的应用不合理,就会降低数据库的运行效率,这就违背了人们选择数据库的初衷,因此必须要通过优化数据库性能,来保障与提升数据库的运行效率。
1.2 提高用户体验
如今,人们通过互联网访问数据库的操作越来越多,例如人们在网上购物的时候,有许多的数据信息都会从数据库中提取出来,如果数据库的性能低,就会导致用户获得数据信息的时间延长,降低用户体验,造成用户流失。因此,必须要通过优化数据库性能,缩短用户获得数据信息的时间,提高用户体验,来留住用户,保住效益[2]。
1.3 减少不必要的硬件开销
数据库的运行是基于硬件的,如果数据库的性能过低,就必须要求更多的硬件作为支撑,从而加大数据库的成本开销。因此,必须要通过优化数据库性能,在有限的硬件平台上,发挥出高效的运行效率,以减少不必要的硬件开销。
2.1 数据库表的优化
在进行数据库表的设计时,首先要遵循标准化、规范化的基本原则,如3NF标准(第三范式),这能够在一定程度上降低数据库的数据冗余程度,有助于数据库的系统扩展,提高数据库的性能:其次,要尽可能减少对硬性编码的应用,而应当多用数据驱动,因为前者过于死板,既不利于扩展也不利于维护;第三,表索引的设计与选择也对数据库性能的影响非常大,所以必须要重视这个问题,并采用妥善的方法进行索引设计,这样才能使数据库的整体性能得到保障。
在簇索引(Clustered Index)的设计与建立上, 由于每一张数据库基本表都最多只能具有一个簇索引, 且这个索引所决定的是数据信息存储的物理顺序, 所以必须要在建立非簇索引之前将簇索引建立起来, 同时还要在建立簇索引的过程当中,应遵循以下原则:
a.包含较多完全不同数据的列:
b.返回大量结果的查询;
c.使用“BETwEEN”及关系运算符返回的查询:
d.需要对单个的行进行快速扫描的OLTP类型的应用;
e.经常被包含有连接或GROUP BY子句查询进行访问的列。而对于经常作更新和较宽的键值,则不适合选择簇索引[2]。
在非簇索引(Nonclustered Index)的设计与建立上,要考虑到它与簇索引的不同,簇索引影响着数据信息存储的物理位置,而非簇索引则与数据信息的物理位置无关, 同时非簇索引只存放数据行的引用。所以,非簇索引需要存放在一个堆上或簇索引上。在实际的数据库应用过程当中,只要有需要通过不同的途径来进行数据搜索,通过建立非簇索引,就能够在很大程度上提升数据搜索速度,增强数据库性能。在实际的操作中,在符合以下条件的情况下,都可以建立非簇索引:
a.不会返回大量结果的查询:
b.经常在返回精确匹配的条件查询被引用的列;
c.包含大量完全不同数据的列,并且在某个列上己建立了簇索引;
d.系统应用中经常使用分组和连接:
e.覆盖整个表的所有列的查询。值得一提的是,虽然通过建立索引能够提高数据库的性能,但是这也会增加一部分的空间与时问开销,所以在索引的设计过程当中,必须要考虑到建立索引能够得到的优化程度是否可以超过其开销,要避免建立无效索引,如果建立索引的负面影响确实过大, 可以通过使用临时表来增强数据库性能。
2.2 其它对象的存放优化
在数据库当中,除了主要的基本表之外,还有多种其他对象,这些对象的存放也影响着数据库的性能, 因此必须要重视对数据库其它对象的存放优化。首先, 大型系统通常使用多个磁盘,要避免系统I/0瓶颈,就要充分利用硬件系统的并行I /0机制, 因此数据存放应跨越多个设备,不同性质访问的数据要分别存放;其次,大型信息系统的事务日志是影响系统性能的重要环节之一,无论是从减少系统开销角度,还是从系统障碍恢复的角度出发, 都应存放在单独的磁盘上,即将系统的日志文件与数据文件分开存储;第三,将访问频度高低不同的表分别存储,可以充分利用系统的并行机制,提高系统的I/0性能。
2.3 数据库查询优化
在一个数据库当中,被执行最多的操作就是查询,因为数据库的存在最主要的目的就是存放数据信息,并在需要时快速、准确的对相关数据信息进行调阅或处理,所以查询效率是评价数据库性能的一个重要指标。
在实际的查询过程当中,已经当从以下几个方面来对查询进行优化:
a.相比于普通的SOL查询语句而言,存储过程的效率更高,所以应当尽可能的使用存储过程:
b.合理使用查询优化器的自动优化功能,这同样能够提高查询效率;
c.合理的应用临时表,尽可能不要进行大量排序:
d.限制对游标的使用;
e.在where子旬当中,最好是不要应用“僳”连接,也不要使用其他复杂的表达式;
f.合理的使用批处理语句。
2.4 锁的优化
一般情况下,数据库都是对若干用户共同开放的,但是在多个用户同时查询或操作同一条数据信息时,就可能会出现数据的一致性与完整性受到破坏,因此必须要有一个机制来确保多用户同时查询或操作同一条数据信息时的数据一致性与完整性,这就是数据库锁。锁的使用虽然能够起到保护数据信息安全的作用,但使用不合理则会影响到数据库的性能,因此必须要注意以下两点问题:
a.根据实际问题对长事务进行分解,从而有效减少排它锁的占用时间;
b.充分利用批处理语句,减少在事务执行过程中的交互,避免人为控制事务的长短;
c.对于访问频繁、并发度较高的数据库应用系统,可采用相应的优化措施从而避免死锁,如:对每个查询使用超时机制、使用带约束的连接、适度平衡使用行锁、页锁及表锁等,从而有效避免死锁。
数据库是存储和管理数据信息的一个重要平台,必须要积极探讨与实践如何优化数据库性能,提高数据库运行效率,将数据库的优势全面发挥出来,进一步推动当前的数据化、信息化发展。
[1]沈海峰.关于如何优化SQL数据库的性能的几点分析[J].电脑知识与技术,2012,03:517—518.
[2]甘洁静.SQL数据库的建立与管理[J].计算机光盘软件与应用,2012,04:109—110.
[3]陈忠菊.SQLServer数据库应用技巧探讨[J].电脑编程技巧与维护,2014,18:45.
[4]雷琳.SQL查询语句优化的研究[J].武汉船舶职业技术学院学报,2011,03:31—33