当前位置:首页 > 日记 > 正文

oracle性能优化建议综述

oracle性能优化建议综述
原则一:注意WHERE子句中的连接顺序:
Oracle使用自底向上序列解析WHERE子句。根据这个原则,表之间的连接必须写在其他条件之前。可以筛选出最多记录数的条件必须写在WHERE子句的结尾处。
特别是主键id =这样的条件。
原则二:避免在SELECT子句中使用*:
Oracle在解析过程中,将*转换为所有的名称,这是通过查询数据字典完成的,这意味着会有更多的时间消耗。
总之,时间越短的语句的执行,更好的是(特别是对系统的最终用户),查询语句,因为这是由全表扫描的数据量大,特别是对于大表,它不仅具有慢查询的速度,但也使磁盘IO压力很大,通常是可以避免的,而避免它通常是使用索引的方式。
使用索引的优点和成本。
优势:
1)指标是表概念的一部分,为了提高数据检索的效率,Oracle使用一个复杂的自平衡树结构。通常,索引查询数据比完整的表扫描快。当Oracle找到执行查询和更新语句的最佳路径时,Oracle优化器将使用索引使用相同的路径。链接多个表的索引也可以提高效率。
2)使用索引的另一个优点是,它提供了对主键(主键)的唯一验证。这些长或长的原始数据类型可以索引几乎所有列。一般来说,索引在大表中尤其有效。当然,您也会发现索引在扫描小表时也能提高效率。
价格:虽然使用指数可以查询效率,但也要注意价格指数。它需要存储空间,也需要定期维护,每当表或索引或列中的记录被修改时,索引本身也将被修改。这意味着每个记录插入、删除。更新将比支付磁盘4, 5倍多,因为索引需要存储和处理额外的、不必要的索引,这将使查询响应时间变慢,而表越大,影响越严重。
你需要注意使用索引的地方:

1。避免在索引列上使用。
我们希望避免使用索引列。不会对索引列上的函数产生相同的影响。当Oracle不满足时,他将停止使用索引来执行全表扫描。

2。避免在索引列上使用计算。
在WHERE子句中,如果索引列是函数的一部分,优化器将使用一个完整的表扫描而不使用索引。例如:
复制代码代码如下所示:
效率低:从12×25000的部门中选择;
高效率:从12 > 25000的部门中选择;

三.避免在索引列中使用NULL而不是NULL。
避免使用任何索引都可以为空的列,Oracle将无法使用性能指数作为单个索引,如果列包含一个空值,则该索引将不存在于此记录中。对于复合索引,如果每个列为空,则该索引不存在于同一记录中。如果至少有一个列表是空的,则记录在索引中。例如:如果唯一的索引基于表的A和B列,表中有一个记录,B值(123,null),Oracle将不接受同一个B值(123,null)的记录(插入)。但是,如果索引列全部为空,Oracle会认为密钥是空的,空的不是空的。因此,您可以插入1000个具有相同键值的记录,当然它们是空的!因为索引中的列中不存在null值,所以索引列空值比较的WHERE子句将导致Oracle禁用索引。

复制代码代码如下所示:
效率低:(指标失效)部门在dept_code是无效的选择;
效率:(指数有效)部门在dept_code > = 0选择;
4。注意通配符的%的效果。
Oracle可以禁用索引时使用通配符等:
复制代码代码如下所示:
选择…从部门dept_code像% 123456%(无效)。
选择…从部门dept_code =123456(有效)

5。避免更改索引列的类型。
在比较不同数据类型的数据时,Oracle会自动对列执行简单的类型转换。
假设EMPNO是一个数值类型索引列。选择…从EMP在empno =123实际上,Oracle类型转换后的语句转换为:选择…从EMP在to_number empno =(123)。幸运的是,类型转换不会发生在索引列上,索引的用法没有改变。现在,假设emp_type是字符类型,索引列。选择…从EMP emp_type = 123,转化为oracle.from EMP whereto_number选择(emp_type)= 123型因为在转换的地方,索引将不会被使用为了避免你的Oracle类型!sql隐式转换,最好使用显式类型转换性能。注意,在比较字符和值时,Oracle会优先考虑字符类型的数值转换类型。

6,脾气的指数
如果A.检索表中有超过30%的数据的记录数,则使用索引的效率没有明显的提高。
在某些情况下可以使用索引,这可能比全表扫描慢,但这是相同数量级的差异。一般来说,使用索引比全表扫描要高几倍甚至几千倍。

除了使用索引外,还有其他方法可以减少资源消耗。

1。用存在替换:
当提交包含一对多表信息(如部门表和表)查询时,避免使用不同的信息。在SELECT子句中可以考虑为存在替换,存在使搜索更快速,因为RDBMS核心模块在子查询条件下一旦满足,立即返回结果。
例子:
复制代码代码如下所示:
(低效):选择不同的dept_no,dept_name从部D,EMP E
在d.dept_no = e.dept_no
E.sex =男人
(有效的):选择dept_no,从dept_name系D
在存在
(选择X从EMP在e.dept_no = d.dept_no
E.sex =男人
);

2。全部替换或合并(适合索引列)
一般来说,用工会替换或在WHERE子句中会有很好的效果。使用或索引列将导致一个完整的表扫描。
注意,上述规则只对多个索引列有效。如果没有索引列,则查询效率可能会因为没有选择或减少而降低。在下面的例子中,索引是建立在loc_id和区域。
如果你坚持使用,或者你需要返回最少记录的索引列到前面。
复制代码代码如下所示:
效率高:选择loc_id,loc_desc,区域位置loc_id = 10联盟所有
选择loc_id,loc_desc,从位置区域=墨尔本区
低效率:选择loc_id,loc_desc,从位置loc_id = 10 =墨尔本地区或区域

三.与union-all取代联盟(如果可能的话):
当SQL语句需要联合两个查询结果集,两组结果将合并union-all,然后排名在最后的输出结果。如果使用联合所有而不是联合,那么这是不必要的。提高分选效率。请注意,联邦将重复输出两个相同的记录集。因此,您应该分析从业务需要使用联合的可行性。联盟将对结果进行排序,此操作将用于sort_area_size记忆。这对于记忆的优化也是非常重要的。
4,逐点语句被添加到索引列中,最好是在主键PK上。
复制代码代码如下所示:
选择从为dept_type系dept_code(低效)
选择dept_code部门订单dept_code(效率高)

5。避免使用资源消耗的操作:
具有不同的联合、减号,SQL的交叉语句将启动SQL引擎来执行资源密集型排序(排序)。区分需要排序操作,而其他需要至少执行两种排序。通常,如果使用联合,减号,SQL的交叉语句可以在其他方式中使用,如果您的数据库被重写了。sort_area_size井的部署,使用联盟、减、相交可以考虑,毕竟,他们的可读性强

6。用在哪里而不用(如果可以的话)
分组优化:
通过语句提高组的效率可以过滤出组之前不需要的记录。下面两个查询返回相同的结果,但是第二个查询显然更快。
复制代码代码如下所示:
低效率:
选择作业,平均值(萨尔)
从EMP组工作有工作=president'and AVG(SAL)> XXX
效率高:
选择作业,平均值(萨尔)
从EMP
工作=总统
或工作=管理组工作,平均值为

7。一般来说,如果可以避免子查询的使用,您将无法使用子查询尽可能多的。因为子查询的开销是很昂贵的。具体的例子是在下列情况下SQL优化过程。
如果您对Oracle性能提升有任何建议,您可以在网站上的论坛上进行交流。

相关文章

PHP计算二维数组中元素数的一种方

PHP计算二维数组中元素数的一种方

计算,方法,二维数组,中元,素数,解决 1。第一次读到的数据从数据库均场合并到一个字符串。 复制代码代码如下所示: 而($米萝= $连接器,fetch_array($结果)) { (=) $str =内容$米萝{}。'。; } arr_str美元= substr($str,0 - 1); > 字符串被截取,因为最…

解决问题在PHP源#

解决问题在PHP源#

解决问题,电脑软件,PHP,PHP最近写的查询里面的源# 4或源# 5经常遇到这样的问题,它是通过mysql_query($ SQL1)进行查询操作,返回的结果不是场源,去网上查一些信息,是资源问题,虽然原则上这种情况还不明白,但解决方案,这是解决问题的代码: 复制代码代码…

一种通过win7系统桌面快捷方式创建

一种通过win7系统桌面快捷方式创建

本地连接,系统,桌面快捷方式,方法,电脑软件,点评:当我们刚刚换了win7的系统,因为没有人教,我知道系统好,所以啊,为了面子,我不能找到一个长时间的连接的地方,我只能默默的寻找它,所以我想给你一个方法来创建桌面上的本地连接。 萧边只是改变了win7…

Linux的BG和FG命令简介

Linux的BG和FG命令简介

命令,简介,电脑软件,Linux,BG,评论:Linux提供了FG和BG命令,使我们能够轻松地调度正在运行的任务,并使程序在前台和后台之间切换。本文将详细介绍,需要的朋友可以参考。 我们都知道,在Windows上,我们要么让程序在后台运行,要么停止服务,而不是让程序…

升级后,电影已死,蓝屏快快。

升级后,电影已死,蓝屏快快。

蓝屏,升级,已死,电影,电脑软件,问题: 在我们3.5版开始的时候,再升级到5,看了几部电影,从第一部电影死机,电脑屏幕不动,只有关掉电源重启蓝屏开机,然后再打开电源,从现在开始关掉新电影,看或者卡死。 答案uff1a 建议您考虑重新加载系统,然后将安装的…

如何打开windows的路由功能

如何打开windows的路由功能

路由功能,电脑软件,windows,点评:如何打开windows的路由功能,步骤非常简单,需要的朋友可以看看。 打开windows的路由功能 1,Windows NT: 打开注册表:REGEDIT.EXE 命中:hkey_local_machine 系统 CurrentControlSet 服务 TCPIP 参数 增加: 价值的名…

对spoolsrv.exe-spoolsrv的作用是

对spoolsrv.exe-spoolsrv的作用是

作用,电脑软件,spoolsrv,exe,点评:spoolsrv.exe是木马程序。该木马允许攻击者访问你的计算机,窃取密码和个人数据 进程文件:spoolsrv或spoolsrv.exe 进程名称:spoolsrv.exe病毒 过程类别:安全风险的过程 英文描述: spoolsrv.exe进程是注册为木…

删除在Linux下大型数据文件中重复

删除在Linux下大型数据文件中重复

字段,数据文件,删除,方法,电脑软件,评论:如果你找Linux,你找不到合适的工具。SED /呆呆的等流处理工具只能处理一行或一列,你不能找到重复的行字段。它有自己的Python程序,突然想起了MySQL,所以宇宙的巨大转变 数据采集程序最近写生成线包含100…

对负载平衡的深入分析

对负载平衡的深入分析

负载,电脑软件,Oracle RAC提供了两种方式实现负载平衡,首先是纯粹的技术手段,即在用户连接,根据负载电流的系统决策请求节点处理用户;其次是面向企业的,人工分割成许多服务中的应用,通过服务连接请求的节点处理这是在两指具体看: 纯技术手段(面向…

如何设置win7笔记本移动WiFi共享网

如何设置win7笔记本移动WiFi共享网

网络,如何设置,电脑软件,WiFi,点评:Win7虚拟无线网卡的使用,没有一个路由器,容易为自己的智能网络创建自己的网络,是不是很漂亮吗 1、在Win + R V的第一步操作;酒吧;操作;cmd输入菜单栏;和一个命令提示符,输入命令netsh wlan设置hostednetwork模式=…

Linux系统输入方法如何切换到windo

Linux系统输入方法如何切换到windo

输入,系统,方法,切换到,电脑软件,评论:很多新朋友不知道Linux系统输入方法是如何切换的其实很简单,在中文和英文中用Ctrl +空格键切换,另一种使用Shift + Ctrl 事实上,Linux系统输入方法切换方法与Windows系统相同。在中英文转换中,使用Ctrl +空…

linux下生成加密密码的方法

linux下生成加密密码的方法

加密,方法,密码,电脑软件,linux,点评:当我们用红帽子启动脚本或添加用户或其他一些事情的时候,我们经常需要使用crypt命令加密生成的密码格式。嗯,事实上,没有其他的方式来产生这样的格式,一个密码,有很多方法。 我们可以使用mkpasswd命令:该命令…