Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何在表上实际创建新列之前生成执行计划以查看新列的效果_Oracle - Fatal编程技术网

Oracle 如何在表上实际创建新列之前生成执行计划以查看新列的效果

Oracle 如何在表上实际创建新列之前生成执行计划以查看新列的效果,oracle,Oracle,在向表中实际添加新列之前,如何提取具有新列的表的执行计划 有可能吗?如果是,请告诉我。新列本身不会影响执行计划。可能改变一个计划的是你最终对该列做了什么,以及你在其中输入了什么数据 例如,如果我有一个包含10000000行的10GB表,请执行以下操作: alter table T add NEW_COL varchar2(1000); 那张桌子仍然是10G大小。扫描只需要很长时间,优化器很可能会为现有查询提供相同的执行计划 但假设我现在跑步 更新T set NEW_COL=rpad('x',1

在向表中实际添加新列之前,如何提取具有新列的表的执行计划


有可能吗?如果是,请告诉我。新列本身不会影响执行计划。可能改变一个计划的是你最终对该列做了什么,以及你在其中输入了什么数据

例如,如果我有一个包含10000000行的10GB表,请执行以下操作:

alter table T add NEW_COL varchar2(1000);
那张桌子仍然是10G大小。扫描只需要很长时间,优化器很可能会为现有查询提供相同的执行计划

但假设我现在跑步

更新T set NEW_COL=rpad('x',1000)

现在我的表中的每一行都大1000字节。(我把链接等问题放在一边),这意味着我的表现在的大小是20GB。这可能会对计划产生巨大影响(即使对于不访问新列的查询),因为表的大小更大,所以扫描变得不那么吸引人等等

执行计划是根据CPU、存储访问等来估算执行查询的成本,而不是通过添加新列


希望这有帮助

请阅读解释计划