`

sql的优化方法(转载)

阅读更多
•尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替。
•不用NOT IN操作符,可以用NOT EXISTS或者外连接+替代。
•Oracle在执行IN子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。NOT EXISTS比NOT IN效率稍高。但具体在选择IN或EXIST操作时,要根据主子表数据量大小来具体考虑。
•不用“<>”或者“!=”操作符。对不等于操作符的处理会造成全表扫描,可以用“<” or “>”代替。
•Where子句中出现IS NULL或者IS NOT NULL时,Oracle会停止使用索引而执行全表扫描。可以考虑在设计表时,对索引列设置为NOT NULL。这样就可以用其他操作来取代判断NULL的操作。

•当通配符“%”或者“_”作为查询字符串的第一个字符时,索引不会被使用。
•对于有连接的列“||”,最后一个连接列索引会无效。尽量避免连接,可以分开连接或者使用不作用在列上的函数替代。
•如果索引不是基于函数的,那么当在Where子句中对索引列使用函数时,索引不再起作用。
•Where子句中避免在索引列上使用计算,否则将导致索引失效而进行全表扫描。
•对数据类型不同的列进行比较时,会使索引失效。
•用“>=”替代“>”。
•UNION操作符会对结果进行筛选,消除重复,数据量大的情况下可能会引起磁盘排序。如果不需要删除重复记录,应该使用UNION ALL。
•Oracle从下到上处理Where子句中多个查询条件,所以表连接语句应写在其他Where条件前,可以过滤掉最大数量记录的条件必须写在Where子句的末尾。
•Oracle从右到左处理From子句中的表名,所以在From子句中包含多个表的情况下,将记录最少的表放在最后。(只在采用RBO优化时有效,下文详述)
•Order By语句中的非索引列会降低性能,可以通过添加索引的方式处理。严格控制在Order By语句中使用表达式。
•不同区域出现的相同的Sql语句,要保证查询字符完全相同,以利用SGA共享池,防止相同的Sql语句被多次分析。
•多利用内部函数提高Sql效率。
•当在Sql语句中连接多个表时,使用表的别名,并将之作为每列的前缀。这样可以减少解析时间。
需要注意的是,随着Oracle的升级,查询优化器会自动对Sql语句进行优化,某些限制可能在新版本的Oracle下不再是问题。尤其是采用CBO(Cost-Based Optimization,基于代价的优化方式)时。

我们可以总结一下可能引起全表扫描的操作:

•在索引列上使用NOT或者“<>”;
•对索引列使用函数或者计算;
•NOT IN操作;
•通配符位于查询字符串的第一个字符;
•IS NULL或者IS NOT NULL;
•多列索引,但它的第一个列并没有被Where子句引用;
Oracle优化器

Oracle优化器(Optimizer)是Oracle在执行SQL之前分析语句的工具。
Oracle的优化器有两种优化方式:基于规则的(RBO)和基于代价的(CBO)。

•RBO:优化器遵循Oracle内部预定的规则。
•CBO:依据语句执行的代价,主要指对CPU和内存的占用。优化器在判断是否使用CBO时,要参照表和索引的统计信息。统计信息要在对表做analyze后才会有。Oracle8及以后版本,推荐用CBO方式。
Oracle优化器的优化模式主要有四种:

•Rule:基于规则;
•Choose:默认模式。根据表或索引的统计信息,如果有统计信息,则使用CBO方式;如果没有统计信息,相应列有索引,则使用RBO方式。
•First rows:与Choose类似。不同的是如果表有统计信息,它将以最快的方式返回查询的前几行,以获得最佳响应时间。
•All rows:即完全基于Cost的模式。当一个表有统计信息时,以最快方式返回表所有行,以获得最大吞吐量。没有统计信息则使用RBO方式。
设定优化模式的方式

•Instance级别:在init<SID>.ora文件中设定OPTIMIZER_MODE;•Session级别:通过SQL> ALTER SESSION SET OPTIMIZER_MODE=;来设定。
•语句级别:通过SQL> SELECT /*+ALL+_ROWS*/ ……;来设定。可用的HINT包括/*+ALL_ROWS*/、/*+FIRST_ROWS*/、/*+CHOOSE*/、/*+RULE*/ 等。
要注意的是,如果表有统计信息,则可能造成语句不走索引的结果。可以用SQL>ANALYZE TABLE table_name DELETE STATISTICS; 删除索引。
对列和索引更新统计信息的SQL:
SQL> ANALYZE TABLE table_name COMPUTE STATISTICS;
SQL> ANALYZE INDEX index_name ESTIMATE STATISTICS;
分享到:
评论

相关推荐

    SQL数据库性能优化

    SQL数据库性能优化 转载,初学者可参考。

    【转载】浅谈基于索引的SQL语句优化方法

    NULL 博文链接:https://myspace1916.iteye.com/blog/1441580

    优化SQL SERVER数据库知识总结

    对优化SQL SERVER数据库和如何使用T-SQL语句来操作SQL SERVER数据库进行了系统的规化,由简单到深入的讲解以及附加示例代码给于参考。本资料属于原创,如要转载,请征求作者的许可!!!

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别.doc

    因为 Transact-SQL 语句本身保持不变,仅参数值发生变化,所以 SQL Server 查询优化器可能重复使用首次执行时所生成的执行计划。 说通俗一点就是:如果用 EXEC 执行一条动态 SQL 语句,由于每次传入的参数不一样,...

    DBA优化方法

    DBA相关的转载 初始化参数(sga)的调整 关于statspack的若干建议 logmnr在调优中的运用 如何对sql进行调整及优化

    ThreeTreeSample.zip 三层架构优化

    方法重构:将多个方法的共同代码提炼出来,单独写在一个方法中,然后引入该方法即可 ———————————————— 版权声明:本文为CSDN博主「EP Fitwin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上...

    最好的asp CMS系统科讯CMSV7.0全功能SQL商业版,KesionCMS V7.0最新商业全能版-免费下载

    33、水印缩略图,可按要求等比缩小,可按要求在指定位置加图片或文字水印,提升内容被转载后的宣传机会。 34、两种编辑器选择,可视化编辑器,类似word的所件即所得的在线内容编辑功能,支持表格、图片、FLASH、...

    [转载]让SQL运行得更快

    笔者在工作实践中发现,不良的SQL往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。在对它们进行适当的优化后,其运行速度有了明显地提高!下面我将从这三个方面分别进行总结

    高效前端:Web高效编程与优化实践_机械工业出版社; 第1版 (2018年1月1日) 完整版-未加密

    全书以问题为导向,精选了前端开发中的34个疑难问题,从分析问题的原因入手,逐步给出解决方案,并分析各种方案的优劣,最后针对每个问题总结出高效编程的最佳实践和各种性能优化的方法。全书共7章,内容从逻辑上...

    【数据库原理】MyShop 商城数据库设计(SQL server)

    声明:未经允许,请勿转载 MyShop商城是一个在线购物平台,致力于提供便捷的购物体验。为了满足用户需求,商城需要一个可靠、高效的数据库系统来管理商品、用户和订单信息。数据库系统应具备性能、可靠性和扩展性,...

    番禺人才网(本人转载,仅供学习)

    番禺人才网(本人转载,仅供学习) 适合做行业性人才网,也可以做地方性人才门户站,目前主要功能有: 0、个人在线添加求职简历 1、个在线上传个人相片 2、首页显示热点新闻(后台可以设置),HR宝店,人事代理,政策法规...

    MySQL 5.5.x my.cnf参数配置优化详解

    虽然还没经过我自己的实践检验,但从文章内容来说已经写的很详细了(当然,事实上下面这篇文章很多地方只是翻译了my.cnf原始配置文件的说明,呵呵),所以特地转载收藏一下,大家在对mysql服务器进行优化的时候可以...

    MONyog MySQL Monitor and Advisor GA (Stable) 5.0.0-6 Full

    其他不好听的话就不说了,谢绝转载,鄙视提供假冒“注册机”的骗子。 MONyog是一款SQL监视和建议工具。帮助MySQL的dbas管理更多MySQL服务器,调整其目前的MySQL服务器,在有严重的问题或中断之前找到并解决他们的...

    好备份v3.3.exe

    5、SQL Server备份:可识别不同的SQL Server实例,备份指定的数据库或所有数据库;支持在线还原操作。 6、MySQL备份:准确识别MySQL服务,备份指定的数据库或所有数据库,采用源文件备份模式,方便数据迁移;支持...

    asp.net知识库

    从NUnit中理解.NET自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom篇) .NET的插件机制的简单实现 我对J2EE和.NET的一点理解 难分难舍的DSO(一) InternalsVisibleToAttribute,友元程序集访问属性 ...

    JS组件Bootstrap Table使用方法详解

    转载 2016年03月21日 15:06:09 标签: Bootstrap Table 最近客户提出需求,想将原有的管理系统,做下优化,通过手机也能很好展现,想到2个方案: a方案:保留原有的页面,新设计一套适合手机的页面,当手机访问时,...

    MONyog MySQL Monitor and Advisor Beta 4.8.0-1 Full

    这是最新MONyog MySQL Monitor and Advisor Beta 4.8.0-1 Full,带序列号,本人亲测可用。...这个软件将积极主动地监控数据库环境,并会就如何用户可以优化性能,加强安全或任何MySQL系统减少停机时间提供意见。

    mysql 数据库备份和还原方法集锦 推荐

    目前 MySQL 支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。

    MONyog MySQL Monitor and Advisor GA (Stable) 4.7.2-0 Full

    这是最新MONyog MySQL Monitor and Advisor GA (Stable) 4.7.2-0 Full,带序列号,本人亲测可用。...这个软件将积极主动地监控数据库环境,并会就如何用户可以优化性能,加强安全或任何MySQL系统减少停机时间提供意见。

    java源码分析-mybatis-projects:分析Mybatis的使用、配置、源码和生成器

    java 源码分析 简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 ...本文为原创文章,转载请附上原文出处链接:

Global site tag (gtag.js) - Google Analytics