基于SQL数据库性能优化研究

基于SQL数据库性能优化研究[摘要]数据库性能调整与优化,对于提高数据库的稳定性、可靠性,保障业务高效运行有着重要意义。本文从数据库性能优化角度出发,探讨程序开发过程中,Oracle数据库的SQL语句调整和优化技术。[关键词]SQL;数据库;性能优化doi:10・3969/j.issn・1673一0194・2013・15.039[中图分类号]TP392[文献标识码]A[文章编号]1673-0194(2013)15-0064-020引言随着计算机技术和网络技术的普及与广泛应用,数据库技术也得到了长足发展,并成为现代计算机信息与应用系统的核心基础技术oOracle数据库是目前使用较为广泛的数据库系统,用户规模和应用范围不断扩展,由此带来的系统性能问题愈来愈突出,因此,对数据库优化技术方法的探索,对解决系统瓶颈,节约系统开销,确保数据库和业务系统稳定、高效地运行,有着至关重要的意义。数据库的优化,主要从硬件、操作系统、数据库参数和应用程序等方面进行配置和调整。据统计,对硬件系统和数据库参数进行优化所获得的性能提升,只占数据库系统性能提升的40%左右,另外的60%系统性能提升来自于对应用程序的优化。其中,应用程序的优化通常可分为两个方面:源代码和SQL语句。一方面,由于涉及对程序逻辑的改变,源代码的优化在时间成本和风险上代价很高,而对数据库系统性能的提升收效有限;另一方面,应用程序对数据库的操作,最终体现在SQL语句对数据库的操作,因此SQL语句的执行效率决定了数据库的性能。由此可见,应用程序的优化应着重于SQL语句的优化。在数据库应用系统中,相同功能的程序可以采用不同的SQL语句编写实现,而不同的SQL语句存在着性能及效率上的差异,这种差异在大型数据库环境中表现得尤为明显。因此,通过优化调整SQL语句,从而显著改善整个系统的性能,对提高数据库内存区的命中率、减少I/O访问、减少对网络资源的占用等有着重要意义。1SQL优化技术分析及实现方法要对SQL语句进行优化,首先应该清楚SQL语句的执行过程。Oracle会为每个用户进程分配一个服务器进程,当服务器进程接收到用户进程提交的SQL语句时,服务器进程会对SQL语句进行语法和词法分析。检查通过后,服务器进程会将SQL语句转变为ASCII码,并通过一个Hash函数将ASCII码生成Hash值,服务器进程会到系统全局区(SystemGlobalArea,SGA)的共享池(SharedPool)中查询此Hash值是否存在。如果存在,服务器进程会在共享池中读取已经解析好的语句来执行,这就是软解析;如果不存在,则需要通过优化器生成执行计划和生成执行编码,这就是硬解析,硬解析完成后,Oracle会将SQL语句本身代码、Hash值、执行计划和所有与此语句相关的统计数据放到共享池中。根据以上所述的SQL语句执行过程,分析优化SQL语句,应主要从以下几个方面来进行:(1)共享SQL语句。(2)高质量的SQL语句。(3)使用索引。1.1共享SQL语句为了不重复解析相同的SQL语句,在第一次解析之后,Oracle将SQL语句存放在内存中。这块位于系统全局区域的共享池中的内存可以被所有的数据库用户共享。如果用户提交的SQL语句和之前的执行过的语句完全相同,Oracle就能很快获得已经被解析的语句以及最好的执行路径,从而大大地提高了SQL的执行性能并节省了内存的使用。要共享SQL语句,必须满足以下3个条件:(1)当前被执行的语句和共享池中的语句必须完全相同。(2)两个语句所指的对象必须完全相同。(3)两个SQL语句中必须使用相同名字的绑定变量(bindvariables)o1.2高质量的SQL语句对于海量数据,质量高的SQL语句和质量差的SQL语句的执行时间可能相差几百秒,可见对于应用系统来说,编写高质量的SQL语句将显著提高系统的速度和可用性。1.2.1使用DECODE函数来减少处理时间使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表,例如:SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO二0200ANDENAMELIKE'SMITH%';SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0300ANDENAMELIKE"SMITH%';使用DECODE函数,可以高效地得到相同结果:SELECTCOUNT(DECODE(DEPT一NO,0200,NULL))D0020_COUNT,COUNT(DECODE(DEPTNO,0300,‘X’,NULL))D0030_C0UNT,SUM(DECODE(DEPTNO,0200,SAL,NULL))D0020_SAL,SUM(...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?