begin
end;
去这里看看?
数据结构被称为物理(存储)的数据结构在计算机中的表示(图片).它包括一个数据元素表示的关系的表示.
物理结构,也就是由Oracle数据库所使用的操作系统的文件结构.对于数据库的物理结构文件,不同版本的Oracle,不同的操作系统平台上的数据库文件存放的目录结构不同的物理结构
其作用可分为三类:
数据日志文件的文件
控制文件
数据文件,数据文件,用于存储数据库中的数据,如表,索引等.当读取数据时,系统首先读取的数据从数据库文件,并存储到数据缓冲器,SGA.
重做日志文件,重做日志文件
所有的记录在数据库中的信息.这是三种类型的文件,文件中最复杂的,而且要保证数据库的安全性和数据库的备份和恢复文件直接.
控制文件是一个二进制文件,用来描述数据库的物理结构,数据库只需要一个控制文件,控制文件的内容,包括:
同步需要恢复的数据文件和日志文件的信息标识数据库和数据库的名称,唯一标识
数据库,检查点数量
/
a
如果有,请记得采纳为满意的答复,谢谢你!我祝你幸福的生活!
vaela
analyze table 表名 compute statistics
analyze index 索引ID compute statistics
如果想分析所有的表名和index名可以从视图user_tables,user_indexes取得相关的信息,自动生成SQL命令
以oracle表分析为例:
drop table test;
select count(*) from test;
--创建测试表
create table test
(
);
--插入测试数据
for i in 1..100000 loop
insert into test(id) values(i);
end loop;
commit;
select * from test;
--更新nick字段,使数据发生严重倾斜
--创建索引
create index idx_test_nick on test(nick);
update test set nick='def' where nick is null;
--只对索引进行分析
analyze index idx_test_nick compute statistics;
select * from user_indexes;
--查看索引名,对应存储的数据块,不同的key数量,记录数(行数)的分析信息
select index_name, LEAF_BLOCKS, DISTINCT_KEYS, NUM_ROWS
from user_indexes
where index_name = 'IDX_TEST_NICK';
--dba_tab_col_statistics
--查看表的统计信息
select COLUMN_NAME, NUM_BUCKETS, num_distinct
from USER_tab_columns
where table_name = 'TEST';
select * from test where nick ='abc';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
①. 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST'
select * from test where nick ='def';
--由上可以看到,对索引分析之后,sql的执行路径都是基于规则的,索引的字段的偏移
--先根据索引找到rowid,然后再根据rowid读取记录,这个过程肯定比全表扫描读取记录要慢
--user_part_col_statistics 分区分析信息
--分析表的第二列nick
--根据上面的执行计划,还是按照规则来执行的
--分析表
analyze table test compute statistics for table;
--分析表之后,完全按照成本来执行
--删除所有的统计数据,并只对表与列进行分析,不分析索引,
--ORACLE使用CBO的优化器,并产生了正确的执行计划
analyze table test delete statistics;
--分析列nick
--
--创建TEST表ID列上的索引,但不对索引进行分析
create index idx_test_id on test(id);
000)
--当条件中即有id,又有nick时,因为nick上有直方图,ORACLE知道nick='abc'的值特别的多,所以不走IDX_TEST_NICK索引,走IDX_TEST_ID上的索引
--当条件中即有id,又有nick时,因为nick上有直方图,ORACLE知道nick='def'的值特别的少,所以走IDX_TEST_NICK上的索引,不走IDX_TEST_ID索引
--在分析ID列后,ORACLE发现ID列的选择度更高,所以不再选择IDX_TEST_NICK索引,而是选择IDX_TEST_ID
analyze table test compute statistics for columns size 1 id;
Card=1)
/*
下面来看另外一种情况,我们删除所有的统计数据,然后在ID列上创建唯一索引,在此条件下,
只分析表与分析列nick,我们看到ORACLE走了正确的执行计划,
走了UK_TEST_ID,其实从这里也给我们带来很多的启示:
在主键与唯一键约束的列上是否需要直方图的问题?
如果在这些列上有像这样的查询where id 100 and id 1000,
我们还是需要有直方图的,但除此之外,好像真的没有直方图的必要了!
*/
drop index idx_test_id;
create unique index uk_test_id on test(id);
d=100000)
在Oracle 数据库中,我们经常需要去手工分析表和索引,还有某个模式下所有的表和索引等等.oracle 提供了两种分析方法,分别是dbms_stats 包和analyze 命令.这些是我们在日常项目管理中的真实使用的方法,供参考.
在10g 中分析某一个用户下所有的对象,如user_miki 用户
Sql代码 收藏代码
(miki西游 @mikixiyou 文档,原文链接: )
在10g 中分析某一个用户下某一个表及其索引,如user_miki 用户下info 表和它的索引
我们在google 时,还能看到使用analzye 命令分析表的方法.
analyze table table_name compute statistics;
这个会将索引和表一起分析;
analyze table table_name compute statistics for table;
这个仅分析表;
analyze table table_name compute statistics for all columns;
这个仅分析表,和上面所有的字段,生成柱形图
analyze table table_name compute statistics for all indexed columns;
这个仅分析表,和上面所有建立索引的字段,生成柱形图
在10g 中,会有个系统的计划任务,每天10 点和周末两天都自动分析新的数据库对象和它认为统计信息已经过期的数据库对象.这个分析结果有时候不靠谱.
所以呢,我都采用10g 中提供的dbms_stats.gather_schema_stats 方法作为补充,设置一个计划任务定期去分析业务用户下所有数据库对象.
variable job number;
sys.dbms_job.submit(job = :job,
例如,设置为每周六运行一次.
以上就是土嘎嘎小编为大家整理的oracle中如何分析表相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!