首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>oracle>正文

如何使用“排序哈希簇”来提高查询速度

http://www.oklinux.cn  2008-01-24  赛迪网 10633  会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

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

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

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

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

哈希函数中存在的一个问题就是函数值会打乱记录原本的顺序。你可以通过 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) [znP80w1( 
  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 来为信用卡建立一个哈希数值。现在,你可以非常简单地对某个信用卡数据进行查询,并返回自动排序后的结果。


上一篇:轻松接触分布式数据库全局名与数据库链   下一篇:KDE走向跨平台 支持Windows和Mac OS X

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·轻松接触分布式数据库全局名与数据库链
·讲解使用文字下标简化“PL/SQL”的技巧
·正确认识Oracle Peeking绑定变量的控制
·巧用Oracle执行计划机制提高查询性能
·怎样在Oracle里用存储过程定期分割表
·调整Oracle应用系统性能的原则和方法
·Oracle数据库各种启动方式的详细介绍
·轻松掌握优化Oracle网络设置的解决方案
·Oracle数据库中关于"null"排序的问题
·详细讲解有关"statspack"的一些使用技巧
·非阻塞算法思想在数据库开发中的应用
·教你快速掌握使用"LogMiner"的具体步骤
·带你深入了解回滚表空间丢失的解决方法
·sql_trace、access path和db_file_mul详解
·Oracle的"Optimizer"及其相关的一些知识
·转移表的表空间和转移索引所在的表空间
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·关于Oracle将目标数据库设为归档模式应
·Linux下OCI基础:配置Instant Client连
·Oracle中被锁定的解决办法
·Oracle 11G 无法连接到数据库实例故障
·浅谈创建Oracle数据库连接的两种方法
·如何从Oracle技术支持获得更多
·Oracle数据库中安全知识介绍
·Oracle推出Linux服务并不成功
·Oracle专用服务器的内存结构分布原则
·如何在RAC环境下修改Oracle字符集
·Oracle过程中执行动态SQL或DDL语句
·2008年Oracle错误、备份、升级等最热门
  阅读排行
·详解远程SHELL下安装配置RedHat ES 5的
·Ubuntu上安装Oracle 10G及相关配置
·Oracle高级复制(同步复制)配置步骤详细
·如何修改遗失的MySQL的ROOT用户密码
·Redhat Linux AS4 安装Oracle 10g(包括
·Linux下OCI基础:配置Instant Client连
·解决启动数据库时发生的ORA-12528错误
·在 Oracle Enterprise Linux 上升级到
·Oracle 10g表空间创建的完整步骤
·centos 5.0中成功安装Oracle10g (1020
·如何在RAC环境下修改Oracle字符集
·Oracle数据库导入导出方法的个人总结
·巧用Oracle执行计划机制提高查询性能
·Oracle 10g 在AIX 5.3上安装过程笔记
·Linux真机环境Oracle 10gR2 RAC 安装完
网摘收藏: