SQL 性能的优化
------------------------------------------
1.1 IN 操作符
用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。
但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:
ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用
多个表的连接方式查询。
由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。
推荐方案:在业务密集的SQL当中尽量不采用IN操作符而使用EXISTS。
1.2 NOT IN操作符
此操作是强列推荐不使用的,因为它不能应用表的索引。
推荐方案:用NOT EXISTS代替
1.3 <> 操作符(不等于)
不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。
推荐方案:用其它相同功能的操作运算代替,如
a<>0 改为 a>0 or a<0
a<>’’ 改为 a>’’
1.4 IS NULL 或IS NOT NULL操作(判断字段是否为空)
判断字段是否为空一般是不会应用索引的,因为B树索引是不索引空值的。
推荐方案:
用其它相同功能的操作运算代替,如
a is not null 改为 a>0 或a>’’等。
不允许字段为空,而用一个缺省值代替空值。
1.5 > 及 < 操作符(大于或小于操作符)
大于或小于操作符一般情况下是不用调整的,因为它有索引就会采用索引查找,但有的情况下可以对它进行优化,
如一个表有100万记录,一个数值型字段A,30万记录的A=0,30万记录的A=1,39万记录的A=2,1万记录的A=3。
那么执行A>2与A>=3的效果就有很大的区别了,因为A>2时ORACLE会先找出为2的记录索引再进行比较,而A>=3时ORACLE则直接找到=3的记录
索引。
1.6 LIKE操作符
LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,
如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。
一个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE ‘%5400%’ 这个条件会产生全表扫描,
如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 则会利用YY_BH的索引进行两个范围的查询,性能肯定大大提高。
1.7 UNION操作符
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
select * from gc_dfys
union
select * from ls_jg_dfys
这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会
导致用磁盘进行排序。
推荐方案:
采用UNION ALL操作符替代UNION,因为UNION ALL操作只是简单的将两个结果合并后就返回。
select * from gc_dfys
union all
select * from ls_jg_dfys
1.8 group by用法
Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。
select topicid,userid,sum(counter) from cis_topic_stat group by rollup(topicid,userid);
也就是说,如果是ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,
然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。
select topicid,userid,sum(counter) from cis_topic_stat group by cube(topicid,userid);
和ROLLUP相比,CUBE又增加了对STATUS列的GROUP BY统计。
如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),
最后对全表进行GROUP BY操作。
1.9 如何使用Hint提示
在select/delete/update后写/*+ hint */
如 select /*+ index(TABLE_NAME INDEX_NAME) */ col1...
注意/*和+之间不能有空格
如用hint指定使用某个索引
select /*+ index(cbotab) */ col1 from cbotab;
select /*+ index(cbotab cbotab1) */ col1 from cbotab;
select /*+ index(a cbotab1) */ col1 from cbotab a;
其中
TABLE_NAME是必须要写的,且如果在查询中使用了表的别名,在hint也要用表的别名来代替表名;
INDEX_NAME可以不必写,Oracle会根据统计值选一个索引;
如果索引名或表名写错了,那这个hint就会被忽略;
相关推荐
### MySQL语句性能优化知识点详解 #### 一、MySQL简介及优化的重要性 MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),因其高效性、稳定性和可扩展性而在各种应用场景中备受青睐。随着数据量的增长和...
以下是一些关于SQL语句性能优化的关键知识点: 1. **LIMIT使用**: LIMIT子句常用于限制查询返回的结果数量,尤其是在分页查询中。它可以有效地减少不必要的数据传输,减轻服务器负载。例如,`SELECT * FROM table...
在实际应用中,我们需要选择合适的索引类型、驱动表、查询路径优化等技术来优化查询语句,提高数据库的查询效率和性能。 六、案例分析 下面是一个简单的案例,它展示了如何使用EXPLAIN工具和画查询图的技术来优化...
在数据库系统中,SQL语句的性能优化是一个极为关键的环节,它直接关系到数据库应用系统的运行效率和用户的数据访问体验。优化的目的在于使数据库操作更快、更高效,降低系统资源消耗,提升数据处理速度。 优化技术...
当然,优化查询不仅仅是针对单个查询,而应该是一个持续的过程,包括定期检查数据库性能,以及在数据库结构变更后重新评估和优化查询语句。 总结来说,SQL查询语句的优化涉及到索引的合理使用、数据分布和存储结构...
Oracle SQL语句性能优化是数据库管理员和开发人员关注的重要领域,因为高效的SQL语句能够显著提升数据库系统的响应速度,减少资源消耗,进而提高整体系统性能。以下是一些关键的优化策略: 1. **避免使用IN操作符**...
SQL语句优化是数据库性能优化中的一个核心环节,涉及对SQL查询语句的调整,以减少查询时间,提高系统资源利用率。 首先,要理解为什么需要优化SQL语句。随着数据库中数据量的不断增加,如果没有对SQL语句进行有效的...
SQL查询语句优化是数据库...总之,SQL查询语句优化是数据库性能优化中不可或缺的一环。通过对查询语句的不断优化,可以显著提高数据库系统的整体性能,满足用户对查询速度的需求,从而为数据库应用提供强有力的支持。
在实践中,应结合具体业务场景和数据分布,综合运用上述技巧,不断调整和优化查询语句,以达到最佳的数据库性能。数据库管理员和开发人员需要密切合作,理解查询语句的行为,持续监控和调优,确保系统的高效运行。
### SQL查询语句优化策略详解 #### 一、选择最有效率的表名顺序 在基于规则的优化器中,如Oracle,SQL语句中表的处理顺序至关重要。Oracle的解析器遵循从右至左的处理逻辑,因此,位于FROM子句最右侧的表将被最先...
优化查询性能的其他策略包括避免数据类型不匹配的问题,确保查询条件中的数据类型与列数据类型一致。例如,避免在比较中混合数字字符串和整数。此外,使用索引可以显著加快查询速度,特别是在经常用于筛选条件的列上...
本文主要围绕SQL语句在Oracle数据库环境下的性能优化进行探讨,涵盖了Oracle表数据的访问方式、索引的建立、SQL语句的性能状态数据收集、操作符的选择等方面,以提供给数据库应用和开发人员优化建议。 1. Oracle...
在处理大型数据库,尤其是当数据量达到百万级甚至千万级时,Oracle数据库的性能优化显得尤为重要。在本篇文档中,作者详细总结了在实际项目中针对Oracle数据库的update语句优化的四种方案。以下是对这四种方案的知识...
随着软件工程的发展和技术的进步,优化`if`语句成为了提高程序性能、减少资源消耗以及提升代码可读性和可维护性的重要手段。本文将深入探讨`if`语句的优化技巧及其应用场景。 #### 一、使用三元运算符简化代码 ...
然而,通过调整这些底层硬件组件虽然可以消除许多性能问题,但也可能掩盖一些问题的根本原因,而这些原因往往与SQL语句查询性能优化有关。针对SQL语句的优化,可以更加精确地提升系统性能,因为不同SQL语句可能针对...
### SQL查询语句优化总结 #### 1. 前言 在客服业务场景中,SQL语句的优化至关重要。...本篇总结了基于索引的SQL查询语句优化方法,希望能够帮助开发者们更好地理解和应用这些技术,有效地优化查询性能。
SQL语句的执行计划对于数据库性能优化至关重要,因为它能够让我们明白一条SQL语句在数据库中是如何执行的,以及数据库是如何利用索引来提高查询效率的。执行计划显示了数据库执行SQL语句时的逻辑步骤,包括查询的...
### 超酷30个Oracle语句优化规则详解 #### 一、选用适合的Oracle优化器 ...此外,注意细节如绑定变量的一致性、对象的统一命名等也是优化查询性能的重要因素。希望以上内容对您理解和应用Oracle语句优化有所帮助。
由于网络环境下数据库操作的新问题,如数据大量传输和高度异构性,优化数据库查询语句以缩短响应时间和提高查询速率变得尤为重要。 SQL查询优化的目的在于在查询执行引擎生成执行策略的过程中,尽可能减少资源占用...
识别和优化低效的SQL语句是数据库性能优化的核心内容。可以使用TKPROF工具来查询SQL性能状态,并利用EXPLAIN PLAN分析SQL语句,查看其执行计划。CBO(Cost-Based Optimizer)是一种基于成本的优化器,它根据统计信息...