为具有同质前缀的VARCHAR列最大限度地提高SQL索引的性能
我正在设计一个DB2表,其中一个VARCHAR列将存储字母数字产品标识符。这些ID的前几个字符几乎没有变化。该列将被索引,我担心性能可能会因为通用前缀而受到影响 据我所知,DB2不使用哈希代码来选择varchar。(至少是基本的DB2,我不知道任何扩展。) 如果这是一个问题,我可以想出三个明显的解决办法为具有同质前缀的VARCHAR列最大限度地提高SQL索引的性能,sql,db2,Sql,Db2,我正在设计一个DB2表,其中一个VARCHAR列将存储字母数字产品标识符。这些ID的前几个字符几乎没有变化。该列将被索引,我担心性能可能会因为通用前缀而受到影响 据我所知,DB2不使用哈希代码来选择varchar。(至少是基本的DB2,我不知道任何扩展。) 如果这是一个问题,我可以想出三个明显的解决办法 创建一个额外的哈希代码列 向后存储文本,以确保初始字符的良好分布 将产品ID分成两列,其中一列包含足够长的前缀,以便在其余部分中生成更好的分布 当然,每一个都是黑客 解决方案2将提供最佳的密钥分
如果我保持我的产品ID不变,我的索引是否可能表现不佳?如果是这样的话,优化性能的最佳方法是什么?我是SQL dba,不是db2,但我认为在索引方面,使用通用前缀不会对您造成任何伤害 索引页只存储键值的“from”和“to”范围,并带有指向实际页面的指针。索引页恰好存储
FrobBar001291
到FrobBar009281
这一事实对数据库引擎来说应该没有丝毫影响
事实上,使用这些通用前缀可以让索引利用其他查询,如:
SELECT * FROM Products WHERE ProductID LIKE 'FrobBar%'
我是SQL dba,不是db2,但我不认为使用通用前缀会对索引造成任何伤害 索引页只存储键值的“from”和“to”范围,并带有指向实际页面的指针。索引页恰好存储
FrobBar001291
到FrobBar009281
这一事实对数据库引擎来说应该没有丝毫影响
事实上,使用这些通用前缀可以让索引利用其他查询,如:
SELECT * FROM Products WHERE ProductID LIKE 'FrobBar%'
我同意BradC的观点,我认为这根本不是一个问题,即使您建议的替代方案有一些小的好处,我想所有的开销和复杂性都会超过任何好处
如果你想了解和改进索引性能,在信息中心有许多主题你应该考虑(特别是最后两个主题看起来是相关的):比如:
- 索引结构
- 索引清理和维护
- 异步索引清理
- MDC表的异步索引清理
- 联机索引碎片整理
- 使用关系索引提高性能
- 关系索引规划技巧
- 关系索引性能提示
如果你想了解和改进索引性能,在信息中心有许多主题你应该考虑(特别是最后两个主题看起来是相关的):比如:
- 索引结构
- 索引清理和维护
- 异步索引清理
- MDC表的异步索引清理
- 联机索引碎片整理
- 使用关系索引提高性能
- 关系索引规划技巧
- 关系索引性能提示