我正在执行一个类似下面的选择语句,执行时间超过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)
答案 0 :(得分:6)
select * from table;
Oracle SQL Developer工具的默认设置只显示50条记录,除非是手动编辑的。因此,由于您不需要显示所有记录,因此无法获取整个2500万条记录。
select * from table where col1 is null;
但是当您过滤空值时,必须扫描整个2500万行的集合以应用过滤器并获得满足该谓词的81条记录。因此,您的第二个查询需要更长时间。