oracl

查看执行过缓存的解析Sql
select name , executions from v$db_object_cache where name like 'select *from sys_yh%'

  •  优化器参数选择
  • 尽量避免使用Choose 模式 采用基于Rule Select 的优化模式
  • Rule模式的     为了使用基于成本的优化器(CBO,Cost—Based Optimizer),必须经常运行analyze命令,以增加数据库中的对象统计信息(object statistics)的准确性.   如果数据库的优化器模式设置为基于选择,那么实际的优化器模式将和是否运行过analyze命令有关。如果数据表已经被analyze过,优化器模式将自动切换成CBO,反之,数据库将采用RULE形式的优化器

访问数据表的方式

① 全表扫描

  全表扫描就是顺序地访问表中每条记录。Oracle采用一次读入多个数据块(database block)的方式优化全表扫描。

② 通过ROWID访问表

  ROWID包含了表中记录的物理位置信息。可以采用基于ROWID的访问方式情况提高访问表的效率。Oracle采用索引实现了数据和存放数据的物理位置(ROWID)之间的联系 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能的提高

n影响数据库系统性能的要素:
¨主机CPU,RAM,存储系统;
¨OS参数配置,ORACLE参数配置;
¨应用方面:数据库设计及SQL编程的质量
n一个性能优秀的应用系统需要:
¨良好的硬件配置;正确合理的数据库及中间件参数配置;合理的数据库设计;良好的sql编程;运行期的性能优化
 
n目标:
¨减少服务器资源消耗(主要是磁盘IO);
n设计方面:
¨尽量依赖oracle的优化器,并为其提供条件;
¨合适的索引,索引的双重效应,列的选择性;
n编码方面:
¨利用索引,避免大表FULL TABLE SCAN;
¨合理使用临时表;
¨避免写过于复杂的sql,不一定非要一个sql解决问题;
¨在不影响业务的前提下减小事务的粒度;
 
 

带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的

SQL语句会启动SQL引擎执行耗费资源的排序(SORT)功能.

DISTINCT需要一次排序操作, 而其他的至少需要执行两次

排序.

例如,一个UNION查询,其中每个查询都带有GROUP BY子句

, GROUP BY会触发嵌入排序(NESTED SORT) ; 这样, 每个

查询需要执行一次排序, 然后在执行UNION时, 又一个唯一

排序(SORT UNIQUE)操作被执行而且它只能在前面的嵌入

排序结束后才能开始执行. 嵌入的排序的深度会大大影响查

询的效率.

通常, 带有UNION, MINUS , INTERSECT的SQL语句都可以

用其他方式重写

用EXISTS替换DISTINCt

低效:

    SELECT DISTINCT DEPT_NO,DEPT_NAME

    FROM DEPT D,EMP E

    WHERE D.DEPT_NO = E.DEPT_NO

高效:

    SELECT DEPT_NO,DEPT_NAME

    FROM DEPT D

    WHERE EXISTS ( SELECT ‘X’

                    FROM EMP E

                    WHERE E.DEPT_NO = D.DEPT_NO);

用UNION  ALL  替代  Union

避免 索引列上使用函数

原文地址:https://www.cnblogs.com/liwenchaoCode/p/7872751.html