我正在设计一个DB2表,其中一个VARCHAR列将存储字母数字产品标识符。这些ID的前几个字符变化很小。该列将被编入索引,我担心由于共同的前缀,性能可能会受到影响。
据我所知,DB2不使用哈希码来选择VARCHAR。 (至少是基本的DB2,我不知道任何扩展。)
如果这是一个问题,我可以想到三个明显的解决方案。
当然,每一个都是黑客。
解决方案#2将提供最佳密钥分发。向后文本可以存储在单独的列中,或者我可以在阅读后反转字符串。每种方法都涉及开销,我想要分析和比较。
使用解决方案#3,密钥分发仍然不是最优的,我需要在阅读后连接文本,或者使用 3 列来获取数据。
如果我按原样保留我的产品ID,我的索引可能表现不佳吗?如果是这样,优化性能的最佳方法是什么?
答案 0 :(得分:1)
我是一个SQL dba,而不是db2,但我不认为拥有共同的前缀会对你造成伤害,明智的索引。
索引页面只存储一个“from”和“to”范围的键值以及指向实际页面的指针。索引页面恰好存储FrobBar001291
到FrobBar009281
这一事实对数据库引擎来说无关紧要。
事实上,拥有这些通用前缀允许索引利用其他查询,例如:
SELECT * FROM Products WHERE ProductID LIKE 'FrobBar%'
答案 1 :(得分:0)
我同意BradC的观点,我认为这根本不是问题,即使你建议的替代品有一些小的好处,我想所有的开销和复杂性都会超过任何好处。
如果您希望了解并改善索引效果,那么您应该考虑信息中心中的许多主题(特别是最后两个主题似乎相关):http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/nav/2_3_2_4_1喜欢:< / p>