其中column为null需要更长的时间来执行

时间:2018-03-23 05:38:34

标签: sql oracle

我正在执行一个类似下面的选择语句,执行时间超过6分钟。

select * from table where col1 is null;

,而:

select * from table;

在几秒钟内返回结果。该表包含2500万条记录。没有使用索引。有一个复合PK,但没有使用col。在具有5000万条记录的不同表上执行时,查询相同,在几秒钟内返回结果。只有这张桌子有问题。

重建表格以检查是否有错过,但仍面临同样的问题。

有人可以帮我解释为什么需要时间吗? 数据类型:VARCHAR2(40) 计划:

Plan hash value: 2838772322

---------------------------------------------------------------------------------------------------
| Id  | Operation                 | Name                  | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |                       |     1 |   794 | 60973  (16)| 00:00:03 |
|*  1 |  TABLE ACCESS STORAGE FULL| table                 |     1 |   794 | 60973  (16)| 00:00:03 |
---------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - storage("column" IS NULL)
       filter("column" IS NULL)

1 个答案:

答案 0 :(得分:6)

select * from table;

Oracle SQL Developer工具的默认设置只显示50条记录,除非是手动编辑的。因此,由于您不需要显示所有记录,因此无法获取整个2500万条记录。

select * from table where col1 is null;

但是当您过滤空值时,必须扫描整个2500万行的集合以应用过滤器并获得满足该谓词的81条记录。因此,您的第二个查询需要更长时间。