数据库优化(sql优化)
1.sql优化:
1.选择最有效的表名顺序(仅适用于RBO模式)将表上记录最少的那个表置于FROM的最右端作为基表。Oracle会首先扫描基表(FROM子句中最后的那个表)并对
记录进行排序
2.select 查询中避免使用'*',*被解析成具体的字段,浪费内存
3.减少访问数据库的次数
4) 使用DECODE函数来减少处理时间
-->使用decode函数可以避免重复扫描相同的行或重复连接相同的表
用Where子句替换HAVING子句
-->尽可能的避免having子句,因为HAVING 子句是对检索出所有记录之后再对结果集进行过滤。这个处理需要排序,总计等操作
-->通过WHERE子句则在分组之前即可过滤不必要的记录数目,从而减少聚合的开销
使用表别名 用EXISTS替代IN
在一些基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下,使用EXISTS(或NOT EXISTS)通常
将提高查询的效率.
合理使用索引以提高性能
虽然使用索引能得到查询效率的提高,但是索引需要空间来存储,需要定期维护.尤其是在有大量DML操作的表上,任意的DML操作都将引起索
引的变更这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O 因此定期的重构索引是有必要的.
索引的情况:
WHERE employee_id + 10 > 150; -->索引列上使用了计算,因此索引失效,走全表扫描方式
) 避免在索引列上使用NOT运算或不等于运算(<>,!=)
通常,我们要避免在索引列上使用NOT或<>,两者会产生在和在索引列上使用函数相同的影响。 当ORACLE遇到NOT或不等运算时,他就会停止
使用索引转而执行全表扫描。
WHERE NOT ( deptno = 20 );
WHERE deptno > 20 OR deptno < 20;
-->尽管此方式可以替换且实现上述结果,但依然走全表扫描,如果是单纯的 > 或 < 运算,则此时为索引范围扫描
避免索引列上使用函数 此时索引失效,使用全表扫描
WHERE子句中的连接顺序
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。
6.SELECT子句中避免使用 ' * '
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 '*' 是一个方便的方法。不幸的是,这是一个非常低效的方法。实际上,ORACLE在解析的过程中,会将'*' 依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。
7.减少访问数据库的次数
当执行每条SQL语句时,ORACLE在内部执行了许多工作:解析SQL语句,估算索引的利用率,绑定变量,读数据块等等。由此可见,减少访问数据库的次数,就能实际上减少ORACLE的工作量。
8.使用DECODE函数来减少处理时间
17.使用表的别名(Alias)
用EXISTS替代IN
1.sql优化:
1.选择最有效的表名顺序(仅适用于RBO模式)将表上记录最少的那个表置于FROM的最右端作为基表。Oracle会首先扫描基表(FROM子句中最后的那个表)并对
记录进行排序
2.select 查询中避免使用'*',*被解析成具体的字段,浪费内存
3.减少访问数据库的次数
4) 使用DECODE函数来减少处理时间
-->使用decode函数可以避免重复扫描相同的行或重复连接相同的表
用Where子句替换HAVING子句
-->尽可能的避免having子句,因为HAVING 子句是对检索出所有记录之后再对结果集进行过滤。这个处理需要排序,总计等操作
-->通过WHERE子句则在分组之前即可过滤不必要的记录数目,从而减少聚合的开销
使用表别名 用EXISTS替代IN
在一些基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下,使用EXISTS(或NOT EXISTS)通常
将提高查询的效率.
合理使用索引以提高性能
虽然使用索引能得到查询效率的提高,但是索引需要空间来存储,需要定期维护.尤其是在有大量DML操作的表上,任意的DML操作都将引起索
引的变更这意味着每条记录的INSERT , DELETE , UPDATE将为此多付出4 , 5 次的磁盘I/O 因此定期的重构索引是有必要的.
索引的情况:
WHERE employee_id + 10 > 150; -->索引列上使用了计算,因此索引失效,走全表扫描方式
) 避免在索引列上使用NOT运算或不等于运算(<>,!=)
通常,我们要避免在索引列上使用NOT或<>,两者会产生在和在索引列上使用函数相同的影响。 当ORACLE遇到NOT或不等运算时,他就会停止
使用索引转而执行全表扫描。
WHERE NOT ( deptno = 20 );
WHERE deptno > 20 OR deptno < 20;
-->尽管此方式可以替换且实现上述结果,但依然走全表扫描,如果是单纯的 > 或 < 运算,则此时为索引范围扫描
避免索引列上使用函数 此时索引失效,使用全表扫描
WHERE子句中的连接顺序
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。
6.SELECT子句中避免使用 ' * '
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 '*' 是一个方便的方法。不幸的是,这是一个非常低效的方法。实际上,ORACLE在解析的过程中,会将'*' 依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。
7.减少访问数据库的次数
当执行每条SQL语句时,ORACLE在内部执行了许多工作:解析SQL语句,估算索引的利用率,绑定变量,读数据块等等。由此可见,减少访问数据库的次数,就能实际上减少ORACLE的工作量。
8.使用DECODE函数来减少处理时间
17.使用表的别名(Alias)
用EXISTS替代IN
相关推荐
MySQL数据库优化SQL篇.ppt,适用于企业级项目开发
数据库面试题索引sql优化.pdf+数据库SQL优化总结之百万级数据库优化.pdf 附赠Oracle高性能sql优化
数据库优化工具 sql优化工具 智能优化
MySQL数据库优化SQL篇PPT课件.pptx
判断SQL是否有问题时可以通过两个表象进行判断: 1、系统级别表象 • CPU消耗严重 • IO等待严重 • 页面响应时间过长 • 应用的日志出现超时等错误 可以使用sar命令,top命令查看当前系统状态。 也可以通过...
优化SQLServer数据库的50种方法
基于Mysql数据库的SQL优化 亲测
SQL2000数据库的优化及安全.pdf
SQL百万级数据库优化大全,是对sql各方面优化的总结和案例引导,避免全表扫描等方面的性能优化。
数据库优化 性能管理 性能优化 sql处理过程 sql优化 索引 全表扫描
MySQL数据库优化SQL篇PPT学习教案.pptx
sql数据库优化方案,可以学习一下。。。。。
优化SQL Server数据库的经验总结
SQL优化 SQL优化软件 SQL优化工具 很好用的工具,可以分析优化TSQL语句,oracle数据库语句优化工具
基于关系型数据库的SQL检索优化研究.pdf
sql性能优化
sqlserver数据库优化50法
我经常碰到有人会问一些数据库优化方面的问题,我觉得这是一最基本技能要求,特别是使用sql server 2005,对于sql server的优化,使用的专职dba或兼职dba们工作更轻松,效率更高了,但是还是有很多新人可能不大了解...
sql 语句优化 SQL Server数据库查询速度慢的原因有很多
数据库SQL优化大总结之 百万级数据库优化方案