首页 > 数据库 > Oracle > 在Oracle中,如何提高DML语句的效率
转载自:小麦苗 公众号,DBA宝典 DB笔试面试题
若是批量处理海量数据的话通常都是很复杂及缓慢的,方法也很多,但是通常的概念是:分批删除,逐次提交。下面介绍一下提高DML 语句效率的常用方法。
|
DML 语句 |
提高 DML 语句效率用方法 |
|
UPDATE |
① 多字段更新使用一个查询。 ② 将表修改为 NOLOGGING 模式。 ③ 根据情况决定是否暂停索引,更新后恢复。避免在更新的过程中涉及到索引的维护。 ④ 批量更新,每更新一些记录后及时进行提交动作,避免大量占用回滚段和临时表空间。 ⑤ 可以创建一个临时的大的表空间用来应对这些更新动作。 ⑥ 加大排序缓冲区。 ⑦ 如果更新的数据量接近整个表,那么就不应该使用索引而应该采用全表扫描。 ⑧ 如果服务器有多个 CPU ,那么可以采用 PARELLEL Hint ,可以大幅度地提高效率。 ⑨ 建表的参数非常重要,对于更新非常频繁的表,建议加大 PCTFREE 的值,以保证数据块中有足够的空间用于 UPDATE 。 ⑩ 通过快速游标更新法,并对 ROWID 进行排序更新,如下所示:
⑪ 当需要更新的表是单个或者被更新的字段不需要关联其它表带过来中的数据(例如:外键约束),则选择标准的 UPDATE 语句,速度最快,稳定性最好,并返回影响条数。如果 WHERE 条件中的字段加上索引,那么更新效率就更高。但若需要关联表更新字段时, UPDATE 的效率就非常差。此时可以采用 MERGE 且非关联形式高效完成表对表的 UPDATE 操作。 |
|
INSERT |
① 将表修改为 NOLOGGING 模式。 ② 暂停索引。 ③ 以 APPEND 模式插入。 ④ 加入 PARALLEL ,采用并行插入。 |
|
DELETE |
① 利用 FORALL 完成。 ② 利用 ROWID 或 ROW_NUMBER() OVER() 高效删除重复记录。 ③ 将表修改为 NOLOGGING 模式。 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15412087/viewspace-2649001/ ,如需转载,请注明出处,否则将追究法律责任。