`
javatgo
  • 浏览: 1124272 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

使用排序哈希簇来加提高询速度

阅读更多

使用排序哈希簇来加提高询速度

当数据存储在一个普通表中的时候,这些记录将以插入到数据库时的顺序物理地保存到分配的块中。例如,如果有一个用于存储员工信息的表,那么员工姓名将会按照插入到表的顺序存储在表中。

<!--start banner ad--><!--ba--> <!-- Sniffer Code for Flash 5 --> on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) <noembed></noembed><noscript></noscript> <noscript></noscript> <!--end banner ad-->

如果员工记录非常多的话,那么数据表的响应速度就会逐渐变慢。你可以通过选择值相对等分布的一列(如员工的部门编号)并建立一个簇表来提高查询员工的速度。

在簇表中,如果员工属于同一个部门,那么它们的记录将物理地存储在同一系列的块中。这样就可以提高查找员工信息的速度,这是因为在检索某个特定部门的员工时,需要读取数据库块的数量减少了。而在非簇表中查找员工,就可能需要对每个数据库块进行访问。

当表中存在大量键值的时候,你就会开始发现由于存在许多簇块而导致的性能问题。避免这个问题的一个方法就是使用一个哈希函数来约束簇块的数量。哈希函数将会给定一个数值用来限定簇块数量的预计范围,但它得到的值是相对等分布的。例如你可以创建一个哈希函数,只比较部门编号的最后两位。

哈希函数中存在的一个问题就是函数值会打乱记录原本的顺序。你可以通过 ORDER BY来解决这个问题;但是,在很多情况下,记录数量是非常庞大的。在Oracle 10g 中,你可以将一个数据定义为“natural order” ,那么就可以不用经过排序而以你所希望的顺序来检索哈希簇的数据,从而解决了上面的提出问题。

例如,假设你有一个信用卡业务的数据库。你决定以信用卡号作为簇主键将有利于数据的存储分布。但是,由于存在大量的信用卡号,所以可以使用一个哈希函数来约束簇块的数量。而且你希望在你的大部分报表中数据是按照时间顺序排列的,那么在进行每个查询操作时使用排序哈希簇,而不要使用ORDER BY。下面给出了相关语句:

create cluster credit_cluster
(
card_no varchar2(16),
transdate date sort
)
hashkeys 10000 hash is ora_hash(card_no)
size 256;

create table credit_orders
(
card_no varchar2(16),
transdate date,
amount number
)
cluster credit_cluster(card_no,transdate);

alter session set nls_date_format = "YYYYMMDDHH24MISS";
insert into credit_orders (card_no,transdate,amount)
values ('4111111111111111','20050131000123',57.99);
insert into credit_orders (card_no,transdate,amount)
values ('4111111111111111','20050130071216',16.59);
insert into credit_orders (card_no,transdate,amount)
values ('4111111111111111','20050131111111',39.00);
insert into credit_orders (card_no,transdate,amount)
values ('4111111111111111','20050130081001',25.16);

可以看到我在这里使用了一个新函数ORA_HASH 来为信用卡建立一个哈希数值。现在,你可以非常简单地对某个信用卡数据进行查询,并返回自动排序后的结果。

<!-- Sniffer Code for Flash 5 --> on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) <noembed></noembed><noscript></noscript> <!-- Sniffer Code for Flash 5 --> on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) <noembed></noembed><noscript></noscript>
分享到:
评论

相关推荐

    用排序哈希簇来提升查询速度

    用排序哈希簇来提升查询速度,这是关于oracle性能的改进,通过很多途径可以提升查询速度,而排序哈希簇从一个独特的视角阐述了性能的改进,以后就多了一个性能改进的方法

    Oracle中利用哈希函数提高查询速度

    避免 这个问题的一个方法就是使用一个哈希函数来约束簇块的数量。哈希函数将会给定一个数值用来限定簇块数量的预计范围,但它得到的值是相对等分布的。哈希函数中存在的一个问题就是函数值会打乱记录原本的顺序。你...

    排序和哈希表

    数据结构的大作业,排序和哈希表的实验报告,实用简洁

    数据结构哈希排序

    里面是关于哈希排序的代码,很详细,很有用。

    哈希排序.doc

    哈希排序详细介绍+案例分析 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数...

    delphi哈希加密示例

    delphi哈希加密示例

    c + + 哈希表实现数字排序

    每组测试数据有两行,第一行有两个数n,m(0,m),第二行包含n个处于区间[−500000,500000]的整数,每个数后有一个空格。

    哈希函数排序用法很好用的

    这是一个哈希函数很有用 他可以更好的排序方便快捷

    C++各种排序+哈希查找(数据结构作业)

    #include #include #include using namespace std ; #define M 131 // 表长 char *Hush[M] = { 0 }; //存放哈希表 char *Hush_Words[32] = { "auto" , "break" , "case" , "char" , "const" ,... //打印哈希表

    哈希表对本班同学进行哈希排序

    自己写的关于哈希表的代码。实现对本班同学的姓名进行哈希排序,查找。还有待完善。。不过能运行带注释好理解。希望给初学者带来帮助

    使用哈希表来识别元素.rar_哈希_哈希表

    使用哈希表来识别元素使 用哈希表来识别元素使用哈希表来识别元素

    内部排序算法比较、哈希表设计

    内部排序算法比较、哈希表设计 数据结构

    【数据结构】基数排序的哈希表

    【数据结构】基数排序的哈希表 一个专为巨量数据的快速存储和检索而设计的哈希表类, 可提供基于不同哈希键值对的近似常数时间的寻位存储和定位检索。 寻位和定位算法基于键对象之哈希值的每一个二进制位的状态所...

    密码哈希盐加密例子

    密码哈希盐加密测试例子,一个不可反算的,绝对安全的加密

    C#实现windows窗体应用程序(哈希表和排序列表的使用)

    输入:多位同学的成绩(名字/成绩(key/value))。输出:平均成绩、最高成绩等。根据用户输入的姓名输出该...(由哈希表、泛型排序列表等多种方式来实现)。 在windows窗体中进行输入和输出,输入出错时会给出提示。

    哈希计算器哈希计算器

    哈希计算器哈希计算器哈希计算器哈希计算器

    C语言 算法 排序 数据结构 哈希表等

    此文档,包含了 树,二叉树,数据结构与算法,排序,哈希表等难点重点详解。希望对于学习有帮助。

    当今世界上检索速度最快的哈希算法

    对于c++程序来说 map的使用无处不在。影响程序性能的瓶颈也往往是map的性能。尤其在大数据情况下,以及业务关联紧密而无法实现数据分发和并行处理的情况。map的性能就成了最关键的技术。 比如:ip表、mac表,电话...

    基于哈希表的快速排序

    唔,自己参考博客园的残缺代码补全的一段基于哈希表的快速排序,可以首先生成一段自定义行数的数据文本,这里为了省事,使用的数字行,实际测试对英文文本也适用,汉字文本我想应该需要另外设定文字间隔和规则,大家...

    折半查找、二叉排序树、链式哈希表的建立与查找

    折半查找、二叉排序树的建立、查找与删除、链式哈希表的建立与查找: 1————建立有序表———— 2————折半查找————— 3————建立二叉排序树—— 4————二叉排序树查找—— 5————二叉排序树...

Global site tag (gtag.js) - Google Analytics