Oracle性能优化

一、SQL语句优化
1.select子句中避免使用'*'
2.使用decode函数来减少处理时间
3.用truncate替代delete
4.尽量多使用commit
5.用where子句替换having子句
6.使用表的别名
7.用exists替代in、用not exists替代not in(大表用exists/not exists,小表用in/not in)
8.用索引提高效率,避免在索引列上使用not 通常,避免在索引列上做计算
9.用>=替换>
10.用union替换or(适用于索引列)
11.用in替换or
12.避免在索引列上使用is null和is not null
13.用where替代order by
14.优化group by,将不需要的记录在group by之前过滤掉
15.使用hint,例如加并行/*+ parallel(8) */

二、统计信息失效,收集统计信息
数据字典查询查询统计信息:USER_TAB_STATISTICS
执行收集统计信息语法:
BEGIN
DBMS_STATS.GATHER_TABLE_STATS
(OWNNAME =>'',--Schema名
TABNAME =>'',--表名
ESTIMATE_PERCENT=>'20',
METHOD_OPT=>'FOR ALL COLUMNS SIZE AUTO',
DEGREE=>'2',
CASCADE =>TRUE );
END;

三、索引优化
1.唯一/主键索引
2.组合索引
优点:
1)通过创建唯一索引可以保证数据库表中每一行数据的唯一性。
2)可以给所有的 MySQL 列类型设置索引。
3)可以大大加快数据的查询速度,这是使用索引最主要的原因。
4)在实现数据的参考完整性方面可以加速表与表之间的连接。
5)在使用分组和排序子句进行数据查询时也可以显著减少查询中分组和排序的时间
缺点:
1)创建和维护索引组要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
2)索引需要占磁盘空间,除了数据表占数据空间以外,每一个索引还要占一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
3)当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,这样就降低了数据的维护速度。

四、查看执行计划,分析SQL
1.PL/SQL工具按快捷键F5或者EXPLAIN PLAN FOR接后面SQL语句,但执行计划不一定准
2.通过底层表查真实执行计划
找出SQL语句的SQL_ID
select * from v$sql where sql_text like '%%';
根据SQL_ID查出执行计划
select * from table(dbms_xplan.display_cursor('sqlidxxxxxxxxx',null,'allstats last'));

五、表分区
1.范围分区(Range Partition)
2.哈希分区(Hash Partition)
3.列表分区(List partition)

posted @ 2023-12-06 22:04  wangtian_6  阅读(132)  评论(0)    收藏  举报