欢迎您访问我爱IT技术网,今天小编为你分享的是oracle数据库教程:【如果要通过索引查询某个key的数据】,通过学习这些教程,你能够更深层次的掌握Oracle数据库!
如果要通过索引查询某个key的数据
Oracle中普通的表称为堆表(heap table),堆表中的数据是无序存放的,往往在使用一段时间后,数据就变得非常无序。如下图所示,索引中相同的key对应的数据存放在不同的block 中,这时,如果要通过索引查询某个key的数据,就需要访问很多不同的block,代价非
Oracle中普通的表称为堆表(heap table),堆表中的数据是无序存放的,往往在使用一段时间后,数据就变得非常无序。如下图所示,索引中相同的key对应的数据存放在不同的block 中,这时,如果要通过索引查询某个key的数据,就需要访问很多不同的block,代价非常高。

Oracle中有一个统计信息clustering factor,它就是用来反映索引中键值在表中的有序程度,clustering factor的值如果接近表的blocks的数量,表明数据在表中的是有序的,而如果这个值接近表的行数,则表明表中的数据是无序存放的。因为 clustring factor对于索引查询的影响很大,所以在CBO计算cost时,这个值非常重要。
我们可以通过创建一个单表的hash cluster,将相同键值的数据物理存放在一起,达到提高性能的目的。创建cluster有两个最重要的参数:HASHKEYS和SIZE,前者表示 cluster中有多少个不同的键值,后者表示每个键值需要分配的空间。因为hash cluster的空间是预先分配的,这两个值的正确设置对cluster的性能影响非常大。hashkeys设置过大,会造成空间浪费,而如果设置过小,则会产生大量的hash碰撞,极大影响性能。size也是一样,设置过大会浪费空间,而设置过小,数据超过预先分配的空间时,会通过链接方式存放在溢出段中,影响性能。而这两个值一旦设置,就无法更改。
hash cluster简单的说就是通过预先分配空间的方式,将相同key的数据存放在一起,以提高查询性能的一种手段,所以准确的设置hashkeys和 size参数是使用hash cluster的关键,使用的前提是key的数量是可以估算的,而且每个key的数据是基本平均的。但是,在实际使用的环境中,数据量的变化往往是不可预知的,这也造成hash cluster的应用场景非常有限。
Index cluster和hash cluster类似,只不过index cluster是通过索引实现数据定位,而且index cluster的空间是动态分配的,但是同样存在正确设置size参数的问题,设置过大过小都会产生性能问题。
个人观点:Oracle cluster更适合相对静态数据的存储,对于OLTP应用来说,cluster在大部分情况下都不太适用,因为我们都无法预估到数据量的变化,根本无法合理设置cluster的参数。
任何技术都要找到合适的应用场景,有利一定有弊,有些技术确实是看上去很美,但是并不实用,而有些方案看上去很土,但是可以解决问题,找到最合适的就好。
-EOF-
如果哪位兄弟有oracle cluster解决实际问题方面的案例,也请和我一起交流。
关于如果要通过索引查询某个key的数据的用户使用互动如下:
相关问题:c++ map怎样根据索引的内容查找到key
答:c++的std::map有两种方式可以实现依据索引的内容查找对应的键值 使用std::map的find接口。 例子如下: std::map mapTest; std::map::iterator it = mapTest.find("index"); if(it!=mapTest.end()) return it->second; 使用std::map的下标运算符... >>详细
相关问题:在java中如何把一个数值中的索引和其对应的值分别...
答:class Data { //...... } Map map = new HashMap(Integer, Data> (); Data []data;//数组, 假设多于0个,并且已初始化 for(int i=0; i >>详细
相关问题:mysql索引key的用法求解? key `q` (`id`) 为什么q...
答:KEY通常是INDEX同义词。如果关键字属性PRIMARY KEY在列定义中已给定,则PRIMARY KEY也可以只指定为KEY。这么做的目的是与其它数据库系统兼容。 PRIMARY KEY是一个唯一KEY,此时,所有的关键字列必须定义为NOT NULL。如果这些列没有被明确地定义... >>详细
- 软件测试开发技术之Oracle数据库维护的前瞻性_Ora
- Oracle9i 数据库设计指引全集_Oracle_领测软件测
- 数据库中Oracle索引的优化设计_Oracle_领测软件测
- Oracle数据库编写有效事务指导方针_Oracle_领测软
- oracle性能Statspack使用之命中率调整_Oracle_领
- Oracle数据库和JSP连接要注意的一些问题[1]_Oracl
- 巧用Oracle备份集在测试机上做不完全恢复[2]_Orac
- 软件测试开发技术Oracle数据块损坏及其恢复的总结
- 使用oracle sql loader批量导入数据_Oracle_领测
- Oracle数据库集中复制方法浅议_Oracle_领测软件测
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-