如何在oracle中索引和使用SHA1值作为PK?

如何在oracle中索引和使用SHA1值作为PK?,oracle,indexing,database-design,data-modeling,Oracle,Indexing,Database Design,Data Modeling,我使用的是oracle 11g标准版: 为了在我的表ART_article中识别一些文章项:我正在基于文章项的内容计算一个散列(sha1),并将该散列存储在ART_ID列中。 我需要跟踪这些文章内容的变化:所以sha1对我来说是一个完美的解决方案。 事实上,所有的值都不是连续的,我有一个很大的聚类因子,当我必须查询我的表时,我大部分时间都需要一系列同时导入的文章(因此在我索引的不同叶中一个接一个地插入)。。。 这会给我带来一些性能问题(例如,当我试图导出以前导入的文章列表时,会出现很长的查询)。

我使用的是oracle 11g标准版: 为了在我的表ART_article中识别一些文章项:我正在基于文章项的内容计算一个散列(sha1),并将该散列存储在ART_ID列中。 我需要跟踪这些文章内容的变化:所以sha1对我来说是一个完美的解决方案。 事实上,所有的值都不是连续的,我有一个很大的聚类因子,当我必须查询我的表时,我大部分时间都需要一系列同时导入的文章(因此在我索引的不同叶中一个接一个地插入)。。。 这会给我带来一些性能问题(例如,当我试图导出以前导入的文章列表时,会出现很长的查询)。 我存储导入数据的所有版本,并具有修订系统(版本表帮助我将每个导入存储在一个版本中。版本中的导入可能会使以前的导入版本过载…)

我的模型如下:

----------------------
TABLE : ART_ARTICLE
--------------------
ART_ID NUMBER(15) PK => computed as SHA1 from others properties (name,short_name..)
NAME
SHORT_NAME
ORIGIN
COLOR 

----------------------
TABLE : ART_ARTICLE_VERSION
--------------------
ART_VERSION PK(1)
ART_ID      PK(2) => PK composed by those 2 first fields
ART_EDIT_TYPE   (Enum in order to know if ART_ID was added/updated/remove from version ART_VERSION
我的问题是: 当我导入更多的新版本和文章列表时,当查询一个版本的所有文章项时,我会遇到更多的性能问题。 当我在ART_ARTICLE版本中按外观顺序对ART_ARTICLE的内容重新排序,并在ART_ID上重建索引时,我的查询再次快速。 如果我只是在导入后重建索引,我就没有真正的收益了。。。所以我认为,我有一个散列作为PK,这一事实对索引的使用有影响

对于我必须在我的ART_ID列上创建索引的方式,有什么建议吗? 我是否必须在每次导入后重新创建表格并按正确的顺序插入艺术ID

我需要跟踪这些文章内容的变化:所以sha1对我来说是一个完美的解决方案

不是作为主键,它不是。文章的每个版本都有不同的主键,因此无法跟踪任何给定文章内容的更改


在中,似乎更可能需要的是一个复合键
(art\u id,version\u no)
,用于存储内容更改,可能还有一个父表
article
,主键仅为
art\u id
,用于存储与文章相关的不可变属性(无论它们是什么).

是否将ART_ID定义为表格创建脚本中表格的主键?你能提供一个表格定义、一个示例查询、一个示例解释显示问题的计划吗?我已经回答了APC(见下文),并为我的问题提供了更多的上下文。我还将更新我的问题,以便添加详细信息。但是实际上,ART_ID被定义为表ART_Article上的主键。您如何生成SHA-1值?SHA1哈希是原始的,不是数字。是的,你是对的。我发布了我的上一个定义,其中我试图通过使用代理编号(序列)来解决散列的分布问题,以获得序列状态id。我正在我的应用程序中计算oracle之外的sha-a(c#:new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(compoundProperties))是的,你是对的,这正是我正在做的。我有一个ART_ARTICLE_VERSION表(ART_id上有一个复合键,VERSION_no)和我的不可变ART_ARTICLE(ART_id上有一个主键),我在其他列中存储文章的不可变状态(名称、简称、来源、颜色)。好的,我在最初的问题中添加了更多细节。