请教各位大侠select有查询计划1. 那update insert delete有执行计划吗?2. 有的话这些执行计划也会进行缓存吗?3. 那是不是也要避免硬编码,以免影响效率啊?

解决方案 »

  1.   

    请教各位大侠select有查询计划1. 那update insert delete有执行计划吗?
    如果这些语句涉及到子查询,那他们是存在有执行计划的。。2. 有的话这些执行计划也会进行缓存吗?
    数据的操作肯定不会是直接些数据文件的,最后由dbwr进程负责从缓存中存入到数据库。
    该进程执行将缓冲区写入数据文件,是负责缓冲存储区管理的一个ORACLE后台进程。当缓冲区中的一缓冲区被修改,它被标志为“弄脏”,DBWR的主要任务是将“弄脏”的缓冲区写入磁盘,使缓冲区保持“干净”。由于缓冲存储区的缓冲区填入数据库或被用户进程弄脏,未用的缓冲区的数目减少。当未用的缓冲区下降到很少,以致用户进程要从磁盘读入块到内存存储区时无法找到未用的缓冲区时,DBWR将管理缓冲存储区,使用户进程总可得到未用的缓冲区。 
    3. 那是不是也要避免硬编码,以免影响效率啊?
    硬编码应该会减慢查询的速度,因为硬编码使得每次数据库都必须对sql进行解析,不过可以开启cursor_share参数,来使用游标共享。我们在编写的程序的时候要避免硬编码,而是使用绑定变量。较少sql解析
      

  2.   

    这个没有操作过,你测试一把呀把insert语句放到plsql里,按下f5试下我觉得应该没有
    比如有些基于数据块的数据复制insert /*+append*/ into ....
      

  3.   

    除了 DDL 语句外,对于 DML 语句 ORACLE 都会缓存执行计划。但是相比存储过程,DML 语句的执行计划的缓存时间较短。
      

  4.   


    --------会公司测试了一把,都有执行计划的
    SQL> explain plan for insert into tt values('11');ExplainedSQL> select * from table(dbms_xplan.display);PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
    | Id  | Operation                | Name | Rows  | Bytes | Cost (%CPU)| Time
    --------------------------------------------------------------------------------
    |   0 | INSERT STATEMENT         |      |     1 |   100 |     1   (0)| 00:00:01
    |   1 |  LOAD TABLE CONVENTIONAL | TT   |       |       |            |
    --------------------------------------------------------------------------------7 rows selectedSQL>