亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

dba_tables中的avg_row_len是如何被計算的

發布時間:2021-11-05 18:33:51 來源:億速云 閱讀:135 作者:柒染 欄目:建站服務器

今天就跟大家聊聊有關dba_tables中的avg_row_len是如何被計算的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

收集信息時avg_row_len被計算,使用analyze 和dbms_stats搜集時計算avg_row_len的差別在于后者不考慮row header占用的3個byte

doc如下:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/schema.htm#sthref720

C:>sqlplus xys/manager

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 8 22:10:18 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


連接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> desc tab1;
名稱                                      是否為空? 類型
----------------------------------------- -------- ----------------------------

ID                                                 NUMBER(38)
NAME                                               VARCHAR2(10)
TIME                                               DATE

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
        16

SQL> SELECT *FROM TAB1;

ID NAME       TIME
---------- ---------- --------------
        1 a          08-10月-07

SQL> insert into tab1 values(2,null , sysdate);

已創建 1 行。

SQL> commit;

提交完成。

SQL> analyze table tab1 compute statistics;

表已分析。

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
        15

SQL> select * from tab1;

ID NAME       TIME
---------- ---------- --------------
        1 a          08-10月-07
        2            08-10月-07
--這里的3是row header占用的byte,1代表的是The column length requires 1 byte for columns that store 250 bytes or less

SQL> select 3+vsize(id)+1+vsize(name)+1+vsize(time)+1 from tab1;

3+VSIZE(ID)+1+VSIZE(NAME)+1+VSIZE(TIME)+1
-----------------------------------------
                                      16


SQL> select 3+vsize(id)+1+nvl(vsize(name),0)+1+vsize(time)+1 from tab1;

3+VSIZE(ID)+1+NVL(VSIZE(NAME),0)+1+VSIZE(TIME)+1
------------------------------------------------
                                             16
                                             15

SQL> truncate table tab1;

表被截斷。

SQL> insert into tab1 values(2,null , sysdate);

已創建 1 行。

SQL> commit;

提交完成。

SQL> analyze table tab1 compute statistics;

表已分析。

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
        15
--如果是null的話而且不在末尾,也就是不是最后一個字段,那么只有column len占用一個字節
SQL> select 3+vsize(id)+1+nvl(vsize(name),0)+1+vsize(time)+1 from tab1;

3+VSIZE(ID)+1+NVL(VSIZE(NAME),0)+1+VSIZE(TIME)+1
------------------------------------------------
                                             15

SQL> truncate table tab1;

表被截斷。

SQL> insert into tab1 values(2,'a',null);

已創建 1 行。

SQL> commit;

提交完成。

SQL> analyze table tab1 compute statistics;

表已分析。

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
         8

SQL> select * from tab1;

ID NAME       TIME
---------- ---------- --------------
        2 a
--如果最后的字段是null的話,那么column len也不占用字節,也就是doc上提到的for trailing null columns Oracle does not even store the column length.
前幾天還看到有人問什么是"trailing null columns",biti大師做了回答
SQL> select 3+vsize(id)+1+vsize(name)+1 from tab1;

3+VSIZE(ID)+1+VSIZE(NAME)+1
---------------------------
                         8

SQL> alter table tab1 add col1 varchar2(300);

表已更改。

SQL> analyze table tab1 compute statistics;

表已分析。

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
         8

SQL> update tab1 set col1=rpad('a' , 249);

已更新 1 行。

SQL> commit;

提交完成。

SQL> analyze table tab1 compute statistics;

表已分析。

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
       259

SQL> select id , name , time , substr(col1 , 1 , 1) from tab1;

ID NAME       TIME           SU
---------- ---------- -------------- --
        2 a                         a

SQL> select 3+vsize(id)+1+vsize(name)+1+nvl(vsize(time),0)+1+1+vsize(col1) from
tab1;

3+VSIZE(ID)+1+VSIZE(NAME)+1+NVL(VSIZE(TIME),0)+1+1+VSIZE(COL1)
--------------------------------------------------------------
                                                          259

SQL> update tab1 set col1=rpad('a' , 250);

已更新 1 行。

SQL> commit;

提交完成。

SQL> analyze table tab1 compute statistics;

表已分析。

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
       260

SQL> select 3+vsize(id)+1+vsize(name)+1+nvl(vsize(time),0)+1+1+vsize(col1) from
tab1;

3+VSIZE(ID)+1+VSIZE(NAME)+1+NVL(VSIZE(TIME),0)+1+1+VSIZE(COL1)
--------------------------------------------------------------
                                                          260
--The column length requires 1 byte for columns that store 250 bytes or less, or 3 bytes for columns that store more than 250 bytes
當列上的值超過250的時候,column len要求3個byte
SQL> update tab1 set col1=rpad('a' , 251);

已更新 1 行。

SQL> commit;

提交完成。

SQL> analyze table tab1 compute statistics;

表已分析。

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
       263

SQL> select 3+vsize(id)+1+vsize(name)+1+nvl(vsize(time),0)+1+1+vsize(col1) from
tab1;

3+VSIZE(ID)+1+VSIZE(NAME)+1+NVL(VSIZE(TIME),0)+1+1+VSIZE(COL1)
--------------------------------------------------------------
                                                          261

SQL> select 3+vsize(id)+1+vsize(name)+1+nvl(vsize(time),0)+1+3+vsize(col1) from
tab1;

3+VSIZE(ID)+1+VSIZE(NAME)+1+NVL(VSIZE(TIME),0)+1+3+VSIZE(COL1)
--------------------------------------------------------------
                                                          263
--==============================================================================
使用dbms_stats收集statistics情況會有所不同,計算avg_row_len時row header不被計算
SQL> truncate table tab1;

表被截斷。

SQL> desc tab1;
名稱                                      是否為空? 類型
----------------------------------------- -------- ----------------------------

ID                                                 NUMBER(38)
NAME                                               VARCHAR2(10)
TIME                                               DATE
COL1                                               VARCHAR2(300)

SQL> insert into tab1(id , name) values(1 , 'a');

已創建 1 行。

SQL> commit;

提交完成。

SQL> exec dbms_stats.gather_table_stats('xys' , 'tab1');

PL/SQL 過程已成功完成。

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
         6

SQL> select vsize(id)+1+vsize(name)+1 from tab1;

VSIZE(ID)+1+VSIZE(NAME)+1
-------------------------
                       5

SQL> update tab1 set time=sysdate;

已更新 1 行。

SQL> commit;

提交完成。

SQL> exec dbms_stats.gather_table_stats('xys' , 'tab1');

PL/SQL 過程已成功完成。

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
        13

SQL> select vsize(id)+1+vsize(name)+1+vsize(time)+1 from tab1;

VSIZE(ID)+1+VSIZE(NAME)+1+VSIZE(TIME)+1
---------------------------------------
                                    13

SQL> update tab1 set col1=rpad('a',249);

已更新 1 行。

SQL> commit;

提交完成。

SQL> exec dbms_stats.gather_table_stats('xys' , 'tab1');

PL/SQL 過程已成功完成。

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
       263

SQL> select vsize(id)+1+vsize(name)+1+vsize(time)+1+vsize(col1)+1 from tab1;

VSIZE(ID)+1+VSIZE(NAME)+1+VSIZE(TIME)+1+VSIZE(COL1)+1
-----------------------------------------------------
                                                 263

SQL> update tab1 set col1=rpad('a',250);

已更新 1 行。

SQL> commit;

提交完成。

SQL> exec dbms_stats.gather_table_stats('xys' , 'tab1');

PL/SQL 過程已成功完成。

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
       264

SQL> select vsize(id)+1+vsize(name)+1+vsize(time)+1+vsize(col1)+1 from tab1;

VSIZE(ID)+1+VSIZE(NAME)+1+VSIZE(TIME)+1+VSIZE(COL1)+1
-----------------------------------------------------
                                                 264

SQL> update tab1 set col1=rpad('a',251);

已更新 1 行。

SQL> commit;

提交完成。

SQL> exec dbms_stats.gather_table_stats('xys' , 'tab1');

PL/SQL 過程已成功完成。

SQL> select avg_row_len from user_tables where table_name='TAB1';

AVG_ROW_LEN
-----------
       265

SQL> select vsize(id)+1+vsize(name)+1+vsize(time)+1+vsize(col1)+1 from tab1;

VSIZE(ID)+1+VSIZE(NAME)+1+VSIZE(TIME)+1+VSIZE(COL1)+1
-----------------------------------------------------
                                                 265

SQL>

看完上述內容,你們對dba_tables中的avg_row_len是如何被計算的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

翁牛特旗| 吐鲁番市| 定陶县| 焉耆| 集贤县| 衢州市| 视频| 衡山县| 延寿县| 旬阳县| 定南县| 黎城县| 天全县| 高尔夫| 连云港市| 达州市| 阳信县| 县级市| 南康市| 方城县| 集安市| 陆河县| 泾源县| 岚皋县| 绥滨县| 永定县| 依安县| 太白县| 大宁县| 平度市| 大同市| 宿松县| 二手房| 商洛市| 舞阳县| 武川县| 宜章县| 杨浦区| 噶尔县| 兰西县| 浪卡子县|