外键没有索引对性能的影响(2)
外键没有索引对性能的影响[@more@]建立一个索引create index tmp_ind_1 on tmp_f (num,id);exec dbms_stats.gather_table_stats('KB','tmp_f');exec dbms_stats.gather_table_stats('KB','tmp_p');SQL> delete from tmp_p where pk =100001;已删除 1 行。执行计划----------------------------------------------------------Plan hash value: 797653082-----------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |--
外键没有索引对性能的影响(3)
外键没有索引对性能的影响[@more@]2、在从表的外键没有索引的时候,update主表上的一个数据delete主表上的一个数据是一样的要求。SQL> update tmp_p set pk=100000 where pk=100001;已更新 1 行。执行计划----------------------------------------------------------Plan hash value: 3169732106--------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time-----------------------------------------------------------------
外键没有索引对性能的影响(1)
外键没有索引对性能的影响[@more@]外键没有索引对性能的影响大家都知道关于外键上没有索引会产生锁的出现,这里不再累述,本文只是就外键没有索引的情况下,Oracle在执行DML语句的时候,CBO为了保证数据的一致性而进行的隐形调用,而这些调用恰恰是反应在Oracle的DML语句执行的性能上,但是这些调用在你使用trace上是无法通过执行计划上看到的。建立环境:drop table tmp_f purge;drop table tmp_p purge;create table tmp_f as select rownum id,rownum num,a.* from all_objects a where 1=0;create table tmp_p(pk number primary key,
FIRST_ROWS和FIRST_ROWS_n的区别
FIRST_ROWS和FIRST_ROWS_n的区别[@more@]FIRST_ROWS和FIRST_ROWS_n的区别1、 FIRST_ROWS_n是在9i之后引入的,应该说FIRST_ROWS模式在9i之后就应该被废弃,之所以还使用主要是因为为了向下兼容的目的。2、 FIRST_ROWS是为了返回前几行,应该说是FIRST_ROWS_1相似。3、 FIRST_ROWS这种模式使用的过程中,CBO会使用一些约束,而这些约束将会限制CBO对表之间的连接模式的选择,其中就有一个是对hash连接的选择,而使用嵌套连接的方式,这样就需要对一个表进行全表扫描,或者使用索引。例如排序order by和group by的时候。这时候系统会使用索引
关于一表很多列的总结
关于一表很多列的总结[@more@]关于一表很多列的总结在ITPIB上遇见一个表有900多列的例子,自己在以前也看到曾经有人这样做过,以下就这个问题做一个总结吧。http://www.itpub.net/showthread.php?s=&threadid=829101&perpage=10&pagenumber=3问题一个有920列的表算列比较多的表吗? oracle10g中我们的一个表有920列,其它几个表有700多列,主要是插入,没有更新。插和读比较多,表的存储是按照日期来分区的。但是所有的这些表都在一个表空间上。只是不知道920多列是否算多,对应数据库的性能影响大吗?关于这样做的好处:我不
关于删除数据的快慢问题的分析
关于删除数据的快慢问题的分析[@more@]关于删除数据的快慢问题的分析总结:康标email:kang_biao@hotmail.com今天在ITPUB上看到一个帖子是关于删除表中数据的问题,意思是删除一个表中的数据为什么行数少的却消耗时间很长?http://www.itpub.net/783169.html其实这个问题应该说是从多个角度分析,也就是有可能多种原因都能够产生现在的这些现象:1、索引的多少。2、表每一行的大小3、外键4、触发器5、高水位一个一个解释:1、索引的多少一个表上的索引存储也是和表一样需要空间,对这个表的删除,同样也会涉及到像关联索引的删除,通俗一点
为什么要使用set unused 删除列?
为什么要使用set unused 删除列?[@more@]为什么要使用set unused 删除列?先总结一下set unused 这个语句的意思,在删除一个列在Oracle上有很多方式,一个是drop column另一个则是set unused。这两个是不一样的。做一个试验:SQL> create table t (a int ,b int , c int);Table createdSQL> alter table t set unused column b;Table alteredSQL> desc t; 名称 是否为空? 类型 ----------------------------------------- -------- -------------- A
临时表在收集统计的时候会出现的问题
临时表在收集统计的时候会出现的问题[@more@]临时表在收集统计的时候会出现的问题添加一个临时表:SQL> create global temporary table gtt(x int) on commit preserve rows;表已创建。SQL> insert into gtt select rownum from all_objects where rownum <= 1000;已创建1000行。SQL> set autotrace on expSQL> select count(*) from gtt; COUNT(*)---------- 1000执行计划----------------------------------------------------------Plan hash value: 3344941513------------------------------------------------
STATSPACK报告解读
STATSPACK报告解读[@more@]STATSPACK报告解读STATSPACK report forDB Name DB Id Instance Inst Num Release Cluster Host------------ ----------- ------------ -------- ----------- ------- ------------his 1834191151 his 1 9.2.0.4.0 NO server这部分主要是数据库环境的一些信息,例如实例名、数据库名、数据库版本等信息。http://spaces.msn.com/kang-biao Snap Id Snap Time Sessions Curs/Sess Comment ------- ------------------ ------
关于BUFFER POOL的一些总结
关于BUFFER POOL的一些总结[@more@]关于BUFFER POOL的一些总结BUFFER POOL有三个池组成:BUFFER POOL 、KEEP、RECYCLE组成。这三个池各有自己的算法来更新存放池中的数据。BUFFER POOL使用的是LRU算法来存放数据块,数据块会根据访问的频率的多少来决定在这个池中存放的时间。KEEP使用的一直存放的算法,将数据一直存放在这个池中,数据不会被清除出池,但是需要说的是所要存放的数据块应该少于池本身的大小。而且存放的数据块的内容一般是需要重复访问的数据块。RECYCLE是存放不经常使用的数据块,也就是说,这个池的算法是不保留数据块,
外连接的一些总结
外连接的一些总结[@more@]外连接的一些总结外连接扩展简单连接的结果,一个外连接返回的值不仅是所有满足连接条件的行,同时还有为NULL值的行。建立试验表A、BSQL> select * from a; A1 A2---------- -- 1 1 2 3 3SQL> select * from b; B1 B2---------- -- 1 1 2 2SQL> select * from a,b where a2=b2; A1 A2 B1 B2---------- -- ---------- -- 1 1 1 1SQL> select * from c; C1 C2---------- -- 1 1 2 4
数据库设计和基本备份规则
数据库设计和基本备份规则[@more@]数据库设计和基本备份规则(摘自《Oracle备份和恢复手册》)1、 建议将日志文件归档到磁盘,并在以后拷贝到磁带中。归档日志文件的目的地不应在与任何数据库文件或者联机重做日志文件存放在一个物理磁盘设备上。同样备份的数据库文件和联机的数据库文件不能驻留在同一个物理设备上。这一规则主要目的是为了防止当一个磁盘出现问题的时候,备份和联机的文件都在一个磁盘上,这就会造成无法将数据库进行修复的局面。这就是所谓的“不要将鸡蛋放在一个篮子里”的意思。而“建议将日志文件归档到磁盘,并在以
关于数据库操作系统的讨论
关于数据库操作系统的讨论[@more@]关于数据库操作系统的讨论这个题目主要是来在ITPUB上的一个讨论:数据库操作系统平台,Linux/Unix 强在哪里?http://www.itpub.net/573121,3.html在这里大家主要集中在几个主流的操作系统上使用Oracle数据库,来讨论究竟是在那个数据库上Oracle比较好。我也结合这个问题的大家的发言和自己的看法总结一个:在主流的数据库操作系统有以下几种,UNIX,LINUX,WINDOWS,其他的例如OpenVMS,Mac OS X Server在实际的使用中相对比较少。在选择使用何种操作系统来跑数据库,我个人认为,可能从性能,可扩展性,
Histogram总结
Histogram总结[@more@]Histogram总结Histogram主要是提供数据的分布情况,以便Oracle的CBO能够做出最优的执行计划。直方图的类型:基于宽度平衡Histogram将字段的属性分成相等的宽度,称作bucket。并计算行数同样的值被放置在同一个bucket中,如果几个行是同样的值,会放置为同一个bucket中,增机bucket的高度。基于高度平衡Histogram每个bucket有几乎相同数量的同样数量的行。如果几行是相同的值,将被放置到同一个或者分散到几个bucket上,也就是说同样值得行被放置在几个bucket中,而每一个bucket的高度,就是存放的行数几乎相同。高度
关于统计数据收集的总结
关于统计数据收集的总结[@more@]关于统计数据收集的总结在Oracle9i数据库以来,收集统计信息有两种统计数据:n 数据库统计作为数据库管理员,需要收集数据库统计信息,这些数据可以量化数据的分布和表、索引和簇存储的特征。统计数据是基于成本优化器的基础,如何收集统计数据是实现成本优化器的根本。可以使用Analyze和Dbms_stats进行数据库统计的收集。n 系统统计只能使用Dbms_stats进行数据库统计的收集。这些信息被存放在数据字典中。2007-3-19新添统计信息收集的一些建议:使用dbms_stats包来收集而不是使用analyze命
DELETE大批量数据的性能优化
DELETE大批量数据的性能优化[@more@]DELETE大批量数据的性能优化问题的提出:一个表有上千万的数据,欲从该表中删除部分数据;在线用的生产库,不能影响生产;该表有四个索引,删除的sql语句用到了索引;正常业务不能停止-不能disable约束,也不能临时不用索引;问题的解决:这个问题中应该重点考虑的问题是这个系统是生产系统,不能离线,所以只能是根据情况考虑一些在线的删除方式。1、 如果是定期清楚历史数据的话,可以考虑用partition的方式,采用分区方式是其优点之一,能够使用其易于管理的一个方面,在这里是不是应该考虑分区时候