楼主: wgz7747

是oracle的错误还是我理解概念的错误?

[复制链接]
招聘 : 软件工程师
论坛徽章:
51
ITPUB元老
日期:2007-09-25 14:45:26现代
日期:2014-02-10 13:35:242014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14马上有车
日期:2014-08-25 08:54:25
11#
 楼主| 发表于 2006-12-30 15:04 | 只看该作者
针对你刚才的帖子,我马上就可以提出异议,因为你看我做的试验,我将sort选项去掉的话,也是可以的,你下面的话就解释不通了
文档上说这个cluster的hash key是telephone_number.后面两个column只是sort用的,这是sorted hash cluster

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
122
马上加薪
日期:2014-02-19 11:55:14ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-03-29 13:11:152010广州亚运会纪念徽章:篮球
日期:2011-02-20 22:50:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
12#
发表于 2006-12-30 15:06 | 只看该作者
最初由 wgz7747 发布
[B]针对你刚才的帖子,我马上就可以提出异议,因为你看我做的试验,我将sort选项去掉的话,也是可以的,你下面的话就解释不通了
文档上说这个cluster的hash key是telephone_number.后面两个column只是sort用的,这是sorted hash cluster [/B]


呵呵,我对cluster实在是没怎么理解。估计是这个文档上错了,没法理解

使用道具 举报

回复
招聘 : 软件工程师
论坛徽章:
51
ITPUB元老
日期:2007-09-25 14:45:26现代
日期:2014-02-10 13:35:242014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14马上有车
日期:2014-08-25 08:54:25
13#
 楼主| 发表于 2006-12-30 15:09 | 只看该作者
cluster这里本来很简单的,但是如果真正要是实际应用,还是比较复杂的,尤其是hash cluster的sorted hash cluster和single table hash cluster,理解起来也是比较麻烦的

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
122
马上加薪
日期:2014-02-19 11:55:14ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-03-29 13:11:152010广州亚运会纪念徽章:篮球
日期:2011-02-20 22:50:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
14#
发表于 2006-12-30 15:11 | 只看该作者
cluster的原理是能理解。但是象hash cluster的具体机制我确实不理解,从来也没用过。看来的好好看看书,试验试验

使用道具 举报

回复
招聘 : 软件工程师
论坛徽章:
51
ITPUB元老
日期:2007-09-25 14:45:26现代
日期:2014-02-10 13:35:242014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14马上有车
日期:2014-08-25 08:54:25
15#
 楼主| 发表于 2006-12-30 15:26 | 只看该作者
我现在的感觉是hash cluster是oracle在新的版本中出现的东东
以前的一些关于index cluster的描述用在hash cluster上可能不太合适
我觉着可能在hash cluster上,使用cluster key这样的概念可能就已经不太合适了
在理解hash cluster时,可能hash is后面跟的字段就应该理解为等同于index cluster的cluster key吧
自己的胡解释,连自己都说不通
--------------------
index cluster和hash cluster的区别是基于对数据的访问方法上的区别,对于index cluster,oracle是通过在cluster index上记录的cluster key和相应的对应这个(cluster key及相关行)所在的起始行的起始块号,相当于普通索引的索引键对应的rowid一样,去查找数据的准确位置
对于hash cluster,oracle是通过hash函数来确定数据的存储位置的,所以oracle在查询数据时,是不需要查询索引的,直接运行hash函数,就可以确定这个cluster key所对应的数据应该在那个块上
应该是对于hash cluster,如果要指定hash is,则必须后面只能跟一个number 类型的字段,那么这时候,这个字段就是cluster key,如果不指定这个字段,使用oracle内部的hash 函数,那么在创建cluster时括号里有几个字段就是说这个cluster key就是有几个字段,这样应该是可以解释的通的吧

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
122
马上加薪
日期:2014-02-19 11:55:14ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-03-29 13:11:152010广州亚运会纪念徽章:篮球
日期:2011-02-20 22:50:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
16#
发表于 2006-12-30 15:33 | 只看该作者
最初由 wgz7747 发布
[B]index cluster和hash cluster的区别是基于对数据的访问方法上的区别,对于index cluster,oracle是通过在cluster index上记录的cluster key和相应的对应这个(cluster key及相关行)所在的起始行的起始块号,相当于普通索引的索引键对应的rowid一样,去查找数据的准确位置
对于hash cluster,oracle是通过hash函数来确定数据的存储位置的,所以oracle在查询数据时,是不需要查询索引的,直接运行hash函数,就可以确定这个cluster key所对应的数据应该在那个块上
应该是对于hash cluster,如果要指定hash is,则必须后面只能跟一个number 类型的字段,那么这时候,这个字段就是cluster key,如果不指定这个字段,使用oracle内部的hash 函数,那么在创建cluster时括号里有几个字段就是说这个cluster key就是有几个字段,这样应该是可以解释的通的吧 [/B]




我也这样理解,所谓的hash key,应该就是hash函数的输入参数,根据这些参数来获得hash值。如果使用内部hash算法,oracle会使用create cluster clustername后面所有列出的column,如果指定hash is,那么hash key就是hash is后面指定的expr。但是这个expr也不要求一定是来自一个column的,多个也行,非number的好像也可以啊
[php]
SQL> create cluster c(id int,name varchar2(20))
  2  hashkeys 100 hash is id+name;

簇已创建。
--
[/php]

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
122
马上加薪
日期:2014-02-19 11:55:14ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-03-29 13:11:152010广州亚运会纪念徽章:篮球
日期:2011-02-20 22:50:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
17#
发表于 2006-12-30 15:39 | 只看该作者
刚在O'Reilly的《oracle精髓》上看到一句话:
如果hash key已经有唯一值,那么可以直接对hash key赋予这个唯一值作为hash函数的计算结果值,避免了在获取过程中执行hash函数,不知道这个是怎么实现的?

使用道具 举报

回复
招聘 : 软件工程师
论坛徽章:
51
ITPUB元老
日期:2007-09-25 14:45:26现代
日期:2014-02-10 13:35:242014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14马上有车
日期:2014-08-25 08:54:25
18#
 楼主| 发表于 2006-12-30 15:42 | 只看该作者
对 hash is后面是一个表达式,但是应该是可以转化为正数的一个表达式,可以看sql reference文档上的对hash is后面的表达式的限制,有很多限制
你用的id+name,正好可以转化为正数
name是使用的它的ascii值

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
122
马上加薪
日期:2014-02-19 11:55:14ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-03-29 13:11:152010广州亚运会纪念徽章:篮球
日期:2011-02-20 22:50:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
19#
发表于 2006-12-30 15:43 | 只看该作者
If no HASH IS clause is specified, the database uses an internal hash function. If the
cluster key is already a unique identifier that is uniformly distributed over its range,
you can bypass the internal hash function and specify the cluster key as the hash
value, as is the case in the preceding example. You can also use the HASH IS clause to
specify a user-defined hash function.

看来上面的那个机制是由oracle内部自动实现的

使用道具 举报

回复
招聘 : 软件工程师
论坛徽章:
51
ITPUB元老
日期:2007-09-25 14:45:26现代
日期:2014-02-10 13:35:242014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14马上有车
日期:2014-08-25 08:54:25
20#
 楼主| 发表于 2006-12-30 15:45 | 只看该作者
你说的这句话,我没有看到英文原话
不过我感觉可以这么理解
比如对于administrator那个文档上举的那个关于电话的例子
对于电话号码本身它是唯一的,在全世界都是唯一的,如果使用它来做hash函数的话,那么实际上是不需要做hash计算的,因为它已经是unique的了,这也就是说hash key已经是unique的了,就不需要进行hash 函数的计算了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表