0

在 z/os 上使用 DB2 10。我的问题是,如果在我的列和其他列的 col 连接上已经有另一个索引(非聚集),例如想要添加索引,那么在列上添加索引是否会产生添加索引的正常成本当 col4 上存在索引时到 col1,这是 col1 和 col2 的串联。

以防您对情况感到好奇。我们在从另一个数据库转换时创建了一些表,并且键位于组合字段上。为了模仿旧的键(因此不重写我们的整个系统),但将这些字段分开以便它们有用,我们有一个包含所有旧单独列的表和一些由触发器创建的键的新列(在插入时) 通过连接一些列,当它们不等于空格时,nb,并且这些新列被索引。

因此,例如,一个表具有 col1 (char)、col2 (char) 和 col3,并在插入时创建索引 col4 作为 col1 和 col2 的连接。

这样做是为了使 col4 匹配我们的旧数据库,例如,如果 col1 或 col2 为空白,则不存在。

好吧,缺点是这是作为一揽子规则完成的,并且在某些表上 col1 和 col2 永远不会是空白的。所以 col1, col2 上的索引将是相同的......实际上是首选,因为有时我们只想按 col1(而不是 w/col2)搜索......特别是在连接其他表时使用它。

那么......在那种情况下,db2 是否从几乎相同的非聚集索引中获得任何优势?

4

1 回答 1

1

就 DB2 而言,它们是完全独立的列(它们是),并且添加索引(更新INSERTs、UPDATEs 和DELETEs 的索引)的成本不能仅仅因为您有一个另一列上的索引恰好是其他两列连接的结果。

如果您仍然查询col4,我会留下一个索引。然后我会在(col1, col2).

于 2013-08-08T21:09:27.307 回答