oracle大表性能优化

打印 上一主题 下一主题

主题 1679|帖子 1679|积分 5037

1 不修改表布局的优化

1.1 收缩表,降低高水位线
  1. ALTER TABLE TEST ENABLE ROW MOVEMENT;
  2. ALTER TABLE TEST SHRINK SPACE;
复制代码
1.2 对表收集统计信息

BEGIN
DBMS_STATS.GATHER_TABLE_STATS(ownname          => user,
tabname          => 'TEST');
END;
1.3 利用oracle的并行查询功能

SELECT /*+ parallel(4)*/* FROM test;
1.4 OR查询条件利用union all替代

1.5 多表团结查询时,在子查询中先写好过滤条件再关联别的表

1.6 DML比较慢时而且并发访问比较低的环境下,会话开启并行DML功能。

Alter session enable parallel dml;
1.7 在insert时利用直接加载和nologging方式插入数据

Insert /*+ append  parallel(4)*/ into test nologging select * from YYY;
1.8 update大量数据时,可以利用先删除后插入的做法代替

2 修改表布局的优化

2.1 在筛选(where)少部分数据的字段上创建索引

2.2 如果查询(select)或者排序(order by)涉及的字段很少,可以在这些字段创建索引

2.3 如果创建了索引,索引没有生效,查询索引状态是否正常。索引为'UNUSABLE'状态要重建索引


2.4 往目标表插入数据时,可以将索引置为'UNUSABLE'状态,等插入数据后,再重建索引

alter index IDX_TEST unusable;
2.5 对表根据业务需求举行分区

2.6 尽大概的利用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间

2.7 涉及LOB字段类型的表,将LOB字段放在一个单独的表空间。因为oracle默认不会缓存大于4000字节的LOB字段,直接从磁盘读写LOB。放在单独的表空间,从而减少对其他大部分对象的影响

2.8 查询表的行迁移环境,如果表行迁移的数据过多,就必要重新建表,同时符合设置PCTFREE,制止更新再次导致行迁移

3 在存储过程的优化

3.1 利用绑定变量的方式输入变量值

3.2 将大表按利用到的字段拆分成临时表(TEMPORARY TABLE)。后面利用临时表数据而不是大表数据参与计算。临时表产生的undo数据设置为放在临时表空间。拆分后,要对临时表收集统计信息
  1. --临时表产生的undo数据设置为放在临时表空间
  2. ALTER SESSION SET TEMP_UNDO_ENABLED = TRUE;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万有斥力

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表