UPDATE [TABLE] SET [FIELD]=0 WHERE [FIELD] IS NULL
[TABLE]是具有超过7亿行的Oracle数据库表。运行6个小时后,我取消了SQL执行。
是否有任何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 /*+ 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:
--------------------------------------------------------------------------------
我试图让新的1.7 JDK与Eclipse(这是Oracle的官方版本)一起工作。 我并不是指仅仅将Eclipse指向它以便您可以在项目中使用它,这很好,而是实际上使用1.7JVM使Eclipse运行。 我已经将新的JVM移到了Java首选项列表的顶部,但是Eclipse仍然从1.6开始。如果在Java首选项中禁用1.6,双击Eclipse后会立即出现一个对话框,上面写着“创建Java虚拟机失败”
问题内容: 我有一个在InnoDB引擎上运行的MySQL表,该表具有大约2,250,000行,其表结构如下: 第一列保存一个从0到2.25M的简单增量值,而&分别保存一个点的一组以十进制度表示的纬度和经度坐标。 这是一个只读表。不会添加其他行,并且唯一需要针对它运行的查询如下: …冒号后面的值是PHP PDO占位符。本质上,此查询的目标是获取表中当前位于Google Maps窗口视口中的所有坐标点
问题内容: 我们在应用程序中有一些持久性数据,这些数据是从服务器查询然后存储在数据库中的,因此我们可以跟踪其他信息。因为我们不想查询何时在内存中使用对象,所以我们这样做是为了阻止其他想要获取相同数据的线程。 我不确定如何处理不存在的行。如果该行不存在,并且另一个线程尝试在同一行上执行另一个操作,那么该线程是否会被阻塞,直到另一个事务完成,或者它还会得到一个空结果集?如果它只得到一个空结果集,是否有
我是spark新手,有一个简单的spark应用程序,使用spark SQL/hiveContext: 从hive表中选择数据(10亿行) 做一些过滤,聚合,包括row_number窗口函数来选择第一行,分组,计数()和最大()等。 将结果写入HBase(数亿行) 我提交的作业运行它在纱线集群(100个执行者),它很慢,当我在火花UI中查看DAG可视化时,似乎只有蜂巢表扫描任务并行运行,其余的步骤#
本文向大家介绍如何进行大表优化?相关面试题,主要包含被问及如何进行大表优化?时的应答技巧和注意事项,需要的朋友参考一下 当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下: 1. 限定数据的范围 务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内; 2. 读/写分离 经典的数据库拆分方案,主库负责写,从库
我不熟悉JTable。 我想在button press事件中在运行时更新jtable数据。 这是我的密码。 但按下“更新”按钮后不会更新。 有人能解决我的问题吗? 提前谢谢。。