日期:2014-05-17  浏览次数:20689 次

oracle开发注意事项小结

    1)统计信息里面,有两行和性能有关。

 15  SQL*Net roundtrips to/from client
 198  rows processed

    第一行表示,从buffer cache到PGA的结果集的往返次数

    第二行表示,访问到的数据块里面的行的个数

    计算:

    SQL*Net roundtrips=[ rows processed/arraysize]+2,当且仅当,rows processed为0,则SQL*Net roundtrips等于1.

    比如:15=[198/13]+2

    注释:在sql*plus中,arraysize缺省为15,命令set arraysize n 可设定arraysize的值。

    2)L99999,999.000

        a)L:表示继承nls_territory的属性

        b)9:表示替换符

        c)0:表示占位符

        d),:表示千分位

        f)若是$999999,则查询输出便总是$打头

    3)break on 字段名

    作用:去掉单列重复值

SQL> select employee_id,hire_date,job_id from employees;

EMPLOYEE_ID HIRE_DATE      JOB_ID
----------- -------------- --------------------
        198 21-6月 -99     SH_CLERK
        199 13-1月 -00     SH_CLERK
        200 17-9月 -87     AD_ASST
        201 17-2月 -96     MK_MAN
        202 17-8月 -97     MK_REP
        203 07-6月 -94     HR_REP
        204 07-6月 -94     PR_REP
        205 07-6月 -94     AC_MGR
        206 07-6月 -94     AC_ACCOUNT
        100 17-6月 -87     AD_PRES
        101 21-9月 -89     AD_VP
        102 13-1月 -93     AD_VP
        103 03-1月 -90     IT_PROG
        104 21-5月 -91     IT_PROG
        105 25-6月 -97     IT_PROG
        106 05-2月 -98     IT_PROG
        107 07-2月 -99     IT_PROG
SQL> break on job_id
SQL> /

EMPLOYEE_ID HIRE_DATE      JOB_ID
----------- -------------- --------------------
        198 21-6月 -99     SH_CLERK
        199 13-1月 -00
        200 17-9月 -87     AD_ASST
        201 17-2月 -96     MK_MAN
        202 17-8月 -97     MK_REP
        203 07-6月 -94     HR_REP
        204 07-6月 -94     PR_REP
        205 07-6月 -94     AC_MGR
        206 07-6月 -94     AC_ACCOUNT
        100 17-6月 -87     AD_PRES
        101 21-9月 -89     AD_VP
        102 13-1月 -93
        103 03-1月 -90     IT_PROG
        104 21-5月 -91
        105 25-6月 -97
        106 05-2月 -98
        107 07-2月 -99
SQL> clear break
breaks 已清除


    4)dba视图和user视图通常是成双成对的。如:

    dba_cons_columns

    user_cons_columns

    5)DML的注意事项

    insert和插入顺序,只要有空间就插入,随意。

    update和行迁移,保留的pctfree不足,可能会有行溢出

    delete无法改变HWM,全表扫描时仍然效率低下

    6)update在开发中要注意:须先select ...... for update nowait;再来update

    会话1:

SQL> select * from t;

        ID NAME
---------- --------------------
         1 a
         2 b
         3 c

SQL> update t set name='d' where id=1;