Oracle列顺序的影响

 Oracle列顺序的影响 

通常情况下,dba或开发人员在进行表设计的时候,都不会考虑到列在表中的顺序的问题,那么列的顺序对我们加快访问表中的数据有没有作用喃?如果我们知道了数据库引擎是怎样在块中存储行的话,这个问题我们就能容易明白了。

H:header记录了行本身的一些属性信息,比如是否锁定,该行中有多少列等;

Ln:length每列的长度

Dn:data 数据

create table test_column_order

(

id1 number,

id2 number,

id3 number,

id4 number,

id5 number,

id6 number,

id7 number,

id8 number,

id9 number,

id10 number

)

begin

for i in 1..1000000 loop

insert into test_column_order values(1,2,3,4,5,6,7,8,9,0);

end loop;

end;

/

declare

sum1 number;

begin

for i in 1..200 loop

select count(id1) into sum1 from test_column_order;

end loop;

end;

/

declare

sum1 number;

begin

for i in 1..200 loop

select count(id10) into sum1 from test_column_order;

end loop;

end;

/

在了解了行的格式后,数据库引擎要定位到某一列,但是它并不知道该列在这一行中的偏移值,这样不得不从第一列开始,然后按照第一列的长度定位到第二列,然后在根据第二列的长度定位到第三列。那么我们在定位第一列的速度应该是最快的,定位往后的列将会越来越慢。

那么在了解数据库的访问规则后,dba应该将经常访问的列放在表的前面。这个需要协同开发人员,在系统设计的时候,做出合适的评估。比如在表设计中经常使用的primary key,在sql审核的时候,发现全部是放在了第一列,但是我们很少使用它,反而一些经常使用时间字段,状态标志位放在了表的后面,如果我们能够利用好列顺序的影响,那么对我们的性能提高也是有一定意义的。

时间: 2024-11-17 14:23:18

Oracle列顺序的影响的相关文章

SqlServer(索引)--创建复合索引时,复合索引列顺序对查询的性能影响[转]

http://www.cnblogs.com/wy123/p/5604400.html SQL Server创建复合索引时,复合索引列顺序对查询的性能影响 说说复合索引 写索引的博客太多了,一直不想动手写,有一下两个原因: 一是觉得有炒剩饭的嫌疑,有兄弟曾说:索引吗,只要在查询条件上建索引就行了,真的可以这么暴力吗? 二来觉得,索引是个非常大的话题,很难概括出所有的情况,你不整出点新意来,倒是有抄袭照搬的嫌疑 既然写了,就写一点稍微不一样的东西出来, 好了,废话打住, /* 20160814备注

SQL Server创建复合索引时,复合索引列顺序对查询的性能影响

原文:SQL Server创建复合索引时,复合索引列顺序对查询的性能影响    说说复合索引 写索引的博客太多了,一直不想动手写,有一下两个原因: 一是觉得有炒剩饭的嫌疑,有兄弟曾说:索引吗,只要在查询条件上建索引就行了,真的可以这么暴力吗? 二来觉得,索引是个非常大的话题,很难概括出所有的情况,你不整出点新意来,倒是有抄袭照搬的嫌疑 既然写了,就写一点稍微不一样的东西出来, 好了,废话打住,开搞   搭建测试环境: 创建一张表,模拟实际业务中的一个表,往里面填入数据, 时间字段上,相对按照时间

[20150508]列顺序问题.txt

[20150508]列顺序问题.txt --链接: https://viveklsharma.wordpress.com/2015/04/30/cpu-cycles-for-column-skipping/ --测试列顺序对CPU cost的影响: SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- --------

如何更改表中的Mysql列顺序

首先,请考虑是否的确需要更改表中的列顺序.SQL的核心要点是从数据存储格式获取应用.总应指定检索数据的顺序.在下面的第1条语句中,以col_name1.col_name2.col_name3顺序返回列:在第2条语句中,以col_name1.col_name3.col_name2顺序返回列: MySQL> SELECT col_name1, col_name2, col_name3 FROM tbl_name; mysql> SELECT col_name1, col_name3, col_na

oracle列合并的实现方法_oracle

很多场合我们都会用到oracle的列合并,oracle提供了如下一些方法用来实现列合并: 一.Oracle 10G以前使用WMSYS.WM_CONCAT: wmsys.wm_concat将字段的值用","来隔开. select id,wm_concat(name) from tab_name group by id; 二.使用sys_connect_by_path sys_connect_by_path(字段名, 2个字段之间的连接符号),这里的连接符号不要使用逗号,oracle会报错

oracle 列 联动

问题描述 oracle 列 联动 我想问问oracle有没有这样的功能:假设我有一张表,里面有三列A.B.C,现在我需要添加一条数据,这时候默认C为100,我如果修改A那列的数据位12,C为88.我再修改B那一列为10,C变为78.能做到么?怎么做呢?

如何能使GridView的列能拖动,并且在拖动后,页面再次刷新后,列顺序还是拖动后的顺序

问题描述 如何能使GridView的列能拖动,并且在拖动后,页面再次刷新后,列顺序还是拖动后的顺序 解决方案 解决方案二:asp做这个似乎难实现,帮顶,学习.解决方案三:第三方..DWZORjqgrid.

Oracle AWR 阙值影响历史执行计划

      最近有网友提到为什么在dba_hist_sql_plan中无法查看到sql语句的历史执行计划,对于这个问题是由于缺省情况下,Oracle 设定的阙值并非捕获所有的sql语句,所以无法看到某些sql历史执行计划乃正常现象.在Oracle 9i的时候,我们可以通过设定不同的快照level获得不同程度的详细信息.也可以单独配置收集sql的阙值,如指定sql的执行次数,磁盘读的次数,解析调用的数量等.所有超出这个设置的sql语句都收集到snapshot之中.Oracle 10g,11g也有相

索引对查询条件顺序的影响

索引|条件 原帖地址:http://community.csdn.net/expert/FAQ/FAQ_Manage.asp?id=0&Topicid=3390663 环境:Sql Server2000 +sp4 问题:select datediff(day,'20040910','20040920')  --这句可以执行 --而下面这句不能执行(有时也可以执行)--sub_para为varchar(8),错误信息是:从字符串转换为 datetime 时发生语法错误.select * from