加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何优化在具有700M行的Oracle表上运行的更新SQL

发布时间:2020-12-12 15:14:02 所属栏目:百科 来源:网络整理
导读:UPDATE [TABLE] SET [FIELD]=0 WHERE [FIELD] IS NULL [TABLE]是一个具有超过7亿行的Oracle数据库表.我已经在运行了6个小时后取消了SQL执行. 有什么SQL提示可以提高性能?还是其他任何解决方案呢? 编辑:此查询将运行一次,然后再也不会. 首先是一次性查询还
UPDATE [TABLE] SET [FIELD]=0 WHERE [FIELD] IS NULL

[TABLE]是一个具有超过7亿行的Oracle数据库表.我已经在运行了6个小时后取消了SQL执行.

有什么SQL提示可以提高性能?还是其他任何解决方案呢?

编辑:此查询将运行一次,然后再也不会.

首先是一次性查询还是一次循环查询?如果您只需要执行此操作,则可能需要以并行模式查看运行查询.您将不得不扫描所有行,您可以自己分配工作负载范围的ROWID(自己动手并行)或使用Oracle内置功能.

假设您想要频繁运行它,并希望优化此查询,则字段列为NULL的行数最终将与总行数相比较小.在这种情况下,索引可以加速事情. Oracle不会将所有索引列的行索引为NULL,因此字段上的索引将不会被查询使用(因为您要查找字段为NULL的所有行).

或者:

>在(FIELD,0)上创建一个索引,0将作为一个非空的伪列,并且所有的行都将在表上编制索引.
>在(CASE WHEN字段IS NULL THEN 1 END)上创建基于函数的索引,这将仅索引为NULL的行(因此索引将非常紧凑).在这种情况下,您必须重写您的查询:

UPDATE [TABLE] SET [FIELD] = 0 WHERE(CASE WHEN字段为NULL THEN 1 END)= 1

编辑:

由于这是一次性场景,您可能需要使用PARALLEL提示:

SQL> EXPLAIN PLAN FOR
  2  UPDATE /*+ PARALLEL(test_table 4)*/ test_table
  3     SET field=0
  4   WHERE field IS NULL;

Explained

SQL> select * from table( dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 4026746538
--------------------------------------------------------------------------------
| Id  | Operation             | Name       | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
|   0 | UPDATE STATEMENT      |            | 22793 |   289K|    12   (9)| 00:00:
|   1 |  UPDATE               | TEST_TABLE |       |       |            |
|   2 |   PX COORDINATOR      |            |       |       |            |
|   3 |    PX SEND QC (RANDOM)| :TQ10000   | 22793 |   289K|    12   (9)| 00:00:
|   4 |     PX BLOCK ITERATOR |            | 22793 |   289K|    12   (9)| 00:00:
|*  5 |      TABLE ACCESS FULL| TEST_TABLE | 22793 |   289K|    12   (9)| 00:00:
--------------------------------------------------------------------------------

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读