创建表时考虑列的顺序
来源:互联网 发布:php 开发方案 编辑:程序博客网 时间:2024/05/22 22:07
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
创建表时考虑列的顺序
创建一个表时表中列的顺序在某些程度上对性能会有一定的影响.(表中的列有数据)
对行数据的存储结构ROWHEADER(行头)和COLUMNDATA(列数据).ROWHEADER存储的信息是一个FLAGBYTE,一个LOCKBYTE和COLUMN
COUNT.COLUMNDATA包含COLUMNLENGTH和COLUMNDATA
关于这些我们可以DUMP个表做一下测试
createtestasselect*fromdba_objects;
selectheader_file,header_blockfromdba_segmentswhereowner='TEST'andsegment_name='TEST';
HEADER_FILE HEADER_BLOCK
------------------------ ---------------------------
13 1179
altersystemdumpdatafile13block1180
得出来的文件在UDUMP中.我们查看如下信息
block_row_dump:
tab0,row0,@0x1f20
tl:96fb:--H-FL--lb:0x0 cc:13--------rowheader信息.
col 0:[3] 535953-------------------COLUMNDATA
fb:--H-FL--是FLAGBYTE.
fbFlagByte:
K=ClusterKey(FlagsmaychangemeaningifthisissettoshowHASHcluster)
C=Clustertablemember
H=Headpieceofrow
D=Deletedrow
F=Firstdatapiece
L=Lastdatapiece
P=Firstcolumncontinuesfrompreviouspiece
N=Lastcolumncontinuesinnextpiece
lb:0x0-----------LOCKBYTE,锁信息
cc:13------------COLUMNCOUNT
col 0---------第一列
[3]-------------COLUMNLENGTH
535953---------实际数据
这里一些信息可以参考grassbell写的文章<<偷窥Datablock的物理结构>>.对每一个列,在每一个列数据前都含有列长度.在做查询时,查询行中某个
列的值,Oracle首先做的是检查这些相关列的长度位.这个操作比较快而且效率较高.但是如果反复频繁的这样子做还是会带来性能方面的影响.
下面的例子中创建了一个有10列的表并插入数据.
先设置DB_BLOCK_SIZE=2K(用参数设置,在这里设置为这个只是为了测试方便)
SQL>createtablesmall(
2 n0number,
3 n1number,
4 n2number,
5 n3number,
6 n4number,
7 n5number,
8 n6number,
9 n7number,
10 n8number,
11 n9number
12 )pctfree0;
Tablecreated.
SQL>begin
2 foriin1..78loop
3 insertintosmallvalues(0,0,0,0,0,0,0,0,0,0);
4 endloop;
5 end;
6 /
PL/SQLproceduresuccessfullycompleted.
SQL>settimingon
SQL>declare
2 nnumber;
3 begin
4 foriin1..1000000loop
5 selectsum(n0)intonfromsmall;
6 endloop;
7 end;
8 /
PL/SQLproceduresuccessfullycompleted.
Elapsed:00:07:437.30
SQL>declare
2 nnumber;
3 begin
4 foriin1..1000000loop1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
创建表时考虑列的顺序
创建一个表时表中列的顺序在某些程度上对性能会有一定的影响.(表中的列有数据)
对行数据的存储结构ROWHEADER(行头)和COLUMNDATA(列数据).ROWHEADER存储的信息是一个FLAGBYTE,一个LOCKBYTE和COLUMN
COUNT.COLUMNDATA包含COLUMNLENGTH和COLUMNDATA
关于这些我们可以DUMP个表做一下测试
createtestasselect*fromdba_objects;
selectheader_file,header_blockfromdba_segmentswhereowner='TEST'andsegment_name='TEST';
HEADER_FILE HEADER_BLOCK
------------------------ ---------------------------
13 1179
altersystemdumpdatafile13block1180
得出来的文件在UDUMP中.我们查看如下信息
block_row_dump:
tab0,row0,@0x1f20
tl:96fb:--H-FL--lb:0x0 cc:13--------rowheader信息.
col 0:[3] 535953-------------------COLUMNDATA
fb:--H-FL--是FLAGBYTE.
fbFlagByte:
K=ClusterKey(FlagsmaychangemeaningifthisissettoshowHASHcluster)
C=Clustertablemember
H=Headpieceofrow
D=Deletedrow
F=Firstdatapiece
L=Lastdatapiece
P=Firstcolumncontinuesfrompreviouspiece
N=Lastcolumncontinuesinnextpiece
lb:0x0-----------LOCKBYTE,锁信息
cc:13------------COLUMNCOUNT
col 0---------第一列
[3]-------------COLUMNLENGTH
535953---------实际数据
这里一些信息可以参考grassbell写的文章<<偷窥Datablock的物理结构>>.对每一个列,在每一个列数据前都含有列长度.在做查询时,查询行中某个
列的值,Oracle首先做的是检查这些相关列的长度位.这个操作比较快而且效率较高.但是如果反复频繁的这样子做还是会带来性能方面的影响.
下面的例子中创建了一个有10列的表并插入数据.
先设置DB_BLOCK_SIZE=2K(用参数设置,在这里设置为这个只是为了测试方便)
SQL>createtablesmall(
2 n0number,
3 n1number,
4 n2number,
5 n3number,
6 n4number,
7 n5number,
8 n6number,
9 n7number,
10 n8number,
11 n9number
12 )pctfree0;
Tablecreated.
SQL>begin
2 foriin1..78loop
3 insertintosmallvalues(0,0,0,0,0,0,0,0,0,0);
4 endloop;
5 end;
6 /
PL/SQLproceduresuccessfullycompleted.
SQL>settimingon
SQL>declare
2 nnumber;
3 begin
4 foriin1..1000000loop
5 selectsum(n0)intonfromsmall;
6 endloop;
7 end;
8 /
PL/SQLproceduresuccessfullycompleted.
Elapsed:00:07:437.30
SQL>declare
2 nnumber;
3 begin
4 foriin1..1000000loop1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 创建表时考虑列的顺序
- 创建表时考虑列的顺序
- Oracle数据库中创建表时怎样考虑列顺序
- 创建索引时应该考虑该列使用时最可能的排序方式
- 在创建表时,需要考虑的一些基本问题
- 创建对象的考虑
- 事情做的顺序考虑
- 顺序表的创建
- 数据库创建索引的考虑
- 创建VDI黄金映像时的考虑因素
- 顺序链表的创建
- 顺序表的创建算法
- 创建表时,创建计算列
- Repeater连接数据库表的实现隐藏显示列,移动列顺序,列宽
- 增加列并修改列的顺序
- 对List及类似于线性表的元素 删除的顺序的考虑
- 翻转单词的顺序列
- 怎样把一个链表掉个顺序(也就是反序,注意链表的边界条件并考虑空链表)?
- 创建iAS10gReportServerCluster
- 将DW数据窗口导出为EXCEL文件的方法(整理)
- 不小心搞大了女朋友的肚皮,我该怎么办才好
- 关于sharedpool的深入探讨(四)
- 关于forAnalysisProvider
- 创建表时考虑列的顺序
- 关于MS数据仓库备份
- 浅谈管理的核心竞争力---参加2004IBMUNIXWorld演讲的感触
- 缩小SQL日志
- TNS-12560的一次解决
- DataGuard的测试总算告一段落
- SQLSERVER2000的零成本(开发、实施)方案
- 成就高薪的细节
- 怎样配置发送电子邮件