栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

首先,它是一次性查询还是循环查询?如果只需要执行一次,则可能要考虑以并行模式运行查询。无论如何,您都将不得不扫描所有行,您可以使用ROWID(自己动手做并行性)范围自己划分工作负载,也可以使用Oracle内置功能。

假设您要经常运行它并希望优化此查询,则

field
列为NULL的行数最终将比总行数少。在这种情况下,索引可以加快处理速度。Oracle不会将所有索引列都为NULL的行编制索引,因此
field
查询不会使用on的索引(因为您要查找所有
field
为NULL的行)。

任何一个:

  • 在上创建索引
    (FIELD, 0)
    ,该索引
    0
    将用作非NULL伪列,并且所有行都将在表上建立索引。
  • 在上创建基于函数的索引
    (CASE WHEN field IS NULL THEN 1 END)
    ,这只会索引为NULL的行(因此索引将非常紧凑)。在这种情况下,您将不得不重写查询:

UPDATe [TABLE] SET [FIELD]=0 WHERe (CASE WHEN field IS NULL THEN 1 END)=1

编辑:

由于这是一次性方案,因此您可能需要使用

PARALLEL
提示:

SQL> EXPLAIN PLAN FOR  2  UPDATE  test_table  3     SET field=0  4   WHERe field IS NULL;ExplainedSQL> 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:--------------------------------------------------------------------------------


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634714.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号