`

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;
分享到:
评论

相关推荐

    sqlserver数据库优化总结的资料

    "SQL优化.xlsx"可能是对SQL查询优化的实例或数据统计,帮助理解如何实际应用优化策略;"通过 SQL Server 2005 索引视图提高性能_files"可能包含关于索引视图的详细资料,这种特殊类型的索引能提高特定查询性能。通过...

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

    五、SQL优化技巧 1. 使用EXPLAIN分析:通过查询计划分析SQL执行路径,了解是否使用了索引,以及索引的效率。 2. 避免全表扫描:尽可能使用索引来减少全表扫描,如使用IN操作符代替NOT IN,使用JOIN替代子查询等。 3....

    SQL笔试题(转载的)

    13. **性能优化**:包括查询优化、索引优化、存储过程优化等,以提升数据库的响应速度和整体性能。 这些基本概念和操作构成了SQL Server的基础知识框架。通过《2011 SQL笔试题》这样的练习材料,学习者可以测试并...

    SQL大总结——转载经典——价值过亿

    14. **性能优化**:SQL性能优化涉及索引策略、查询优化、内存管理和硬件配置等多个方面,是数据库管理员的重要工作。 《SQL大总结》文档很可能是对这些知识点的详细讲解和实例演示,读者可以通过学习来提升自己的...

    sqlserver学习资料(转载!)

    9. SQL Server性能优化: - 查询优化器:选择执行查询的最佳计划。 - 索引优化:合理创建和使用索引以提升查询性能。 - DMVs(动态管理视图)和性能计数器:监控和诊断系统性能。 10. SQL Server安全性: - ...

    Excel表导入sqlserver(转载的,已试过成功)

    同时,通过合理设置`SqlBulkCopy`的相关参数,可以进一步优化数据导入性能。 此外,需要注意的是,在实际应用中还需要考虑到数据类型匹配、异常处理等问题,以确保程序的稳定性和数据的准确性。

    本人提供SQL语句大全(转载) 12009年04月28日 星期二 19:35SQL语句大全(转载)

    从给定的文件信息中,我们可以提炼出一系列与SQL语句相关的知识点,这些知识点涵盖了SQL的基本操作、查询优化以及在不同数据库系统中的表现差异。以下是对这些知识点的详细阐述: ### 1. SQL语句大全 文件标题和...

    摘录转载sql语句大全

    本文摘录了几个关键的SQL优化技巧,旨在帮助用户写出更高效、性能更佳的查询语句。 1. **选择最有效的表名顺序**:在ORACLE数据库中,FROM子句中的表处理顺序是从右到左,因此,应将记录最少的表放在最后,以减少...

    秒杀应用的MySQL数据库优化 (转载)

    接下来,**SQL语句的优化**也是必不可少的。避免在WHERE子句中使用否定表达式、函数或全表扫描,这些都会降低查询效率。尽量使用JOIN操作替代子查询,并确保IN和NOT IN子句中的元素数量得到控制,以防止全表扫描。 ...

    图解access to sql2000 转换,acc 2 sql 成功分享!新势力网络原创,转载请注明出处,谢谢!

    同时,如果数据库规模较大或结构复杂,可能需要更多的时间和优化策略来确保转换的顺利进行。 总之,Access to SQL2000的转换过程涉及到数据源的配置、DSN的创建、数据库连接的设置以及实际的数据迁移。这个过程虽然...

    海量数据装载工具SQL Loader技术分析.pdf

    为了更好地理解SQL Loader的实际应用,文章通过实例来说明其操作过程及方法,并与常规装载方法进行了对比分析。这些实例有助于用户更好地掌握SQL Loader的操作,了解如何通过具体的操作来提高数据装载的速度和质量。...

    工资管理系统

    在《12软件技术1(软件测试)-SQL Server数据库项目实训时间.txt》文件中,可能包含了关于如何设计和实施SQL Server数据库项目、进行软件测试以及优化性能的实践指南。这份文档可能会涵盖SQL查询优化、性能监控、错误...

    ThreeTreeSample.zip 三层架构优化

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

    【RPA之家转载视频教程7】在UiPath中排序数据表-如何在UiPath中对数据表进行排序-RPA技术中心.rar

    本视频教程【RPA之家转载视频教程7】深入讲解了如何在UiPath中对数据表进行排序,旨在帮助学习者掌握这一核心技能。 首先,理解数据表排序的基本概念至关重要。在UiPath中,数据表通常以DataTable的形式存在,它是...

    《转载》oracle1000问

    - SQL优化:使用EXPLAIN PLAN分析执行计划,通过索引、连接优化、子查询优化提升性能。 - 会话管理:通过设置合适的初始化参数调整会话资源,如PGA、SGA等。 - 分区(Partitioning):大表可以按特定规则分区,...

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

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

    db2学习代码例子(代码为转载网上)

    7. `存储过程关于loop的说明.txt`:此文本文件可能深入探讨了在DB2存储过程中使用循环结构(如WHILE或FOR loops)的方法,如何处理循环中的数据,以及如何控制流程控制。 通过这些文件,你可以学习到DB2数据库系统...

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

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

Global site tag (gtag.js) - Google Analytics