oracle 区间索引,我应该如何使用Oracle中的varchar2列对索引进行范围分区?这是个坏主意吗?...

我使用的是Oracle 10g企业版。

Oracle数据库中的表存储另一个文本列的soundex值表示。我们使用自定义soundex实现,其中soundex值比传统soundex算法(例如Oracle使用的算法)生成的更长。这是非常重要的。

基本上我有一个varchar2列,其值包含单个字符,后跟动态数字值(例如'A12345','S382771'等)。该表由另一列分区,但我想将一个分区索引添加到soundex列,因为它经常被搜索。当尝试使用soundex列的第一个字符添加范围分区索引时,它工作得很好:

create index IDX_NAMES_SOUNDEX on NAMES_SOUNDEX (soundex)

global partition by range (soundex) (

partition IDX_NAMES_SOUNDEX_PART_A values less than ('B'), -- 'A%'

partition IDX_NAMES_SOUNDEX_PART_B values less than ('C'), -- 'B%'

...

);但是,为了更均匀地分配分区的大小,我想通过前两个字符定义一些分区,如下所示:

create index IDX_NAMES_SOUNDEX on NAMES_SOUNDEX (soundex)

global partition by range (soundex) (

partition IDX_NAMES_SOUNDEX_PART_A5 values less than ('A5'), -- 'A0% - A4%'

partition IDX_NAMES_SOUNDEX_PART_A values less than ('B'), -- 'A4% - A9%'

partition IDX_NAMES_SOUNDEX_PART_B values less than ('C'), -- 'B%'

...

);我不确定如何使用varchar2列正确区分范围。我确信这不是一个理想的选择,所以也许有人可以推荐一个更好的解决方案。这是我表中soundex数据的分布:

-----------------------------------

| SUBSTR(SOUNDEX,1,1) | COUNT |

-----------------------------------

| A | 6476349 |

| B | 854880 |

| D | 520676 |

| F | 1200045 |

| G | 280647 |

| H | 3048637 |

| J | 711031 |

| K | 1336522 |

| L | 348743 |

| M | 3259464 |

| N | 1510070 |

| Q | 276769 |

| R | 1263008 |

| S | 3396223 |

| V | 533844 |

| W | 555007 |

| Y | 348504 |

| Z | 1079179 |

-----------------------------------如您所见,分布不均匀分布,这就是为什么我想使用前两个字符而不是第一个字符来定义范围分区。

建议?

谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值