[20171203]平均长度和虚拟列.txt

简介: [20171203]平均长度和虚拟列.txt --//昨天看链接https://blog.dbi-services.com/doag-2017-avg_row_len-with-virtual-columns/ --//重复测试看看.

[20171203]平均长度和虚拟列.txt

--//昨天看链接https://blog.dbi-services.com/doag-2017-avg_row_len-with-virtual-columns/
--//重复测试看看.

1.环境:
SCOTT@test01p> @ ver1
PORT_STRING           VERSION    BANNER                                                                       CON_ID
--------------------- ---------- ---------------------------------------------------------------------------- ------
IBMPC/WIN_NT64-9.1.0  12.1.0.1.0 Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production      0

2.测试:
create table t
(
GUID0 RAW(16)
,GUID1 RAW(16)
,GUID2 RAW(16)
,GUID0_CHAR as (SUBSTR(RAWTOHEX(GUID0),1,8)||'-'||
                SUBSTR(RAWTOHEX(GUID0),9,4)||'-'||
                SUBSTR(RAWTOHEX(GUID0),13,4)||'-'||
                SUBSTR(RAWTOHEX(GUID0),17,4)||'-'||
                SUBSTR(RAWTOHEX(GUID0),21,12))
,GUID1_CHAR as (SUBSTR(RAWTOHEX(GUID1),1,8)||'-'||
                SUBSTR(RAWTOHEX(GUID1),9,4)||'-'||
                SUBSTR(RAWTOHEX(GUID1),13,4)||'-'||
                SUBSTR(RAWTOHEX(GUID1),17,4)||'-'||
                SUBSTR(RAWTOHEX(GUID1),21,12))
,GUID2_CHAR as (SUBSTR(RAWTOHEX(GUID2),1,8)||'-'||
                SUBSTR(RAWTOHEX(GUID2),9,4)||'-'||
                SUBSTR(RAWTOHEX(GUID2),13,4)||'-'||
                SUBSTR(RAWTOHEX(GUID2),17,4)||'-'||
                SUBSTR(RAWTOHEX(GUID2),21,12))
);
 
insert into t (guid0,guid1,guid2)
select sys_guid(), sys_guid(),sys_guid()
from xmltable('1 to 10000');
commit

execute sys.dbms_stats.gather_table_stats ( OwnName => nvl('',user),TabName => 't',
Estimate_Percent => NULL,Method_Opt=> 'FOR ALL COLUMNS SIZE 1 ',Cascade => True ,No_Invalidate => false);

SCOTT@test01p> select avg_row_len from tabs where table_name='T';
AVG_ROW_LEN
-----------
        162

SCOTT@test01p> select sum(avg_col_len) from user_tab_columns where table_name='T' and column_name in ('GUID0','GUID1','GUID2');
SUM(AVG_COL_LEN)
----------------
              51

--//很明显,实际占用长度51(说明oracle考虑前面1个字节的长度指示器),而查询分析报平均总长度162.明显包括了虚拟列.
--//作者的解析oracle这样设计有它的道理,比如select * ,hash join连接的计算等.

explain plan for
select a.*, b.guid0 b_guid0 from t a, t b
where a.guid0_char=b.guid0_char;

SCOTT@test01p> @dp
PLAN_TABLE_OUTPUT
---------------------------
Plan hash value: 2135975663
---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      | 10000 |  2109K|    46   (0)| 00:00:01 |
|*  1 |  HASH JOIN         |      | 10000 |  2109K|    46   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| T    | 10000 |   527K|    23   (0)| 00:00:01 |
|   3 |   TABLE ACCESS FULL| T    | 10000 |  1582K|    23   (0)| 00:00:01 |
---------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1
   2 - SEL$1 / B@SEL$1
   3 - SEL$1 / A@SEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      SWAP_JOIN_INPUTS(@"SEL$1" "B"@"SEL$1")
      USE_HASH(@"SEL$1" "B"@"SEL$1")
      LEADING(@"SEL$1" "A"@"SEL$1" "B"@"SEL$1")
      FULL(@"SEL$1" "B"@"SEL$1")
      FULL(@"SEL$1" "A"@"SEL$1")
      OUTLINE_LEAF(@"SEL$1")
      ALL_ROWS
      DB_VERSION('12.1.0.1')
      OPTIMIZER_FEATURES_ENABLE('12.1.0.1')
      IGNORE_OPTIM_EMBEDDED_HINTS
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("A"."GUID0_CHAR"="B"."GUID0_CHAR")

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - (#keys=1) "A"."GUID0_CHAR"[VARCHAR2,68], "GUID0"[RAW,16],
       "GUID0"[RAW,16], "GUID1"[RAW,16], "GUID2"[RAW,16]
   2 - "GUID0"[RAW,16]
   3 - "GUID0"[RAW,16], "GUID1"[RAW,16], "GUID2"[RAW,16]

48 rows selected.

--//select a.*, b.guid0 b_guid0 from t a, t b where a.guid0_char=b.guid0_char;

--//别名表b在前面,
--//(17+37)*10000/1024 = 527.34375K.
--//162*10000/1024=1582.03125K.

2.如果使用传统的analyze分析看看.
SCOTT@test01p> analyze table t compute statistics;
Table analyzed.


SCOTT@test01p> select avg_row_len from tabs where table_name='T';
AVG_ROW_LEN
-----------
         54

SCOTT@test01p> select sum(avg_col_len) from user_tab_columns where table_name='T' and column_name in ('GUID0','GUID1','GUID2');
SUM(AVG_COL_LEN)
----------------
              48

--//传统analyze的分析不包括前面的长度指示器.而平均长度计算仅仅包括前面的fb,cc长度(占3个字节),以及前面长度指示器.
--//这样3+17*3 = 54字节.

目录
相关文章
函数依赖,闭包,覆盖,最小化基本集,部分函数依赖与完全函数依赖,传递函数依赖,候选键,外来建,逻辑蕴含
函数依赖,闭包,覆盖,最小化基本集,部分函数依赖与完全函数依赖,传递函数依赖,候选键,外来建,逻辑蕴含
207 0
|
机器学习/深度学习 存储 编解码
计算机视觉中的transformer模型创新思路总结
本文回顾了ViT的结构,总结了计算机视觉中的transformer的主要改进思路:改进分块,改进位置编码,改进Encoder,增加Decoder。每个思路下都介绍了相关的论文,介绍了这些论文的提出出发点和改进思路。 本文的目的不在于介绍transformer现在有哪些模型,而在于学习借鉴别人发现问题并改进的思路,从而在自己方向上提出合适且合理的改进。
计算机视觉中的transformer模型创新思路总结
|
JavaScript 前端开发 API
easyui布局——【入门】
easyui布局——【入门】
easyui布局——【入门】
|
19天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
10天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
14天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
1159 39
|
13天前
|
机器学习/深度学习 人工智能 搜索推荐
万字长文深度解析最新Deep Research技术:前沿架构、核心技术与未来展望
近期发生了什么自 2025 年 2 月 OpenAI 正式发布Deep Research以来,深度研究/深度搜索(Deep Research / Deep Search)正在成为信息检索与知识工作的全新范式:系统以多步推理驱动大规模联网检索、跨源证据。
906 57