当另一个已经以相同的顺序存在时添加索引的成本

时间:2013-08-08 19:51:22

标签: sql indexing db2

在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是否从非聚集索引中获得了相同的优势呢?

1 个答案:

答案 0 :(得分:1)

就DB2而言,它们是完整的单独列(它们是),以及添加索引(更新INSERT s,UPDATE和{的索引的成本{1}} s)不能被“短路”只是因为你在另一列上有一个索引恰好是另外两列连接的结果。

如果您仍然在DELETE查询,我会留下一个索引。然后我会在col4上添加一个新索引。