Oracle数字字符串列和索引

时间:2015-09-11 15:02:34

标签: sql oracle performance indexing oracle11g

我在oracle中有一个带或不带前导零样本的数字字符串列:

00000000056
5755
0123938784579343
00000000333  
984454  

问题是使用l​​ike的部分搜索操作非常慢

select account_number from accounts where account_number like %57%

一种解决方案是将搜索限制为仅匹配,并添加一个额外的整数列,表示完全匹配的数值。
此时我不确定我们是否可以添加额外的列,
你们有其他想法吗?

是否可以告诉Oracle将数字字符串列索引为整数值,以便我们可以对其进行精确的数字匹配?

例如查询值:00000000333
将是:

select account_number from accounts where account_number = '333'

忽略前导零 我可以使用regex_like并忽略它们,但我担心它会变慢。

2 个答案:

答案 0 :(得分:5)

Oracle支持基于函数的索引。因此,如果您对to_number的结果进行索引:

CREATE INDEX acocunt_number_idx 
ON accounts(TO_NUMBER(account_number))

方式是,如果您使用to_number的查询获得确切的数值,则将使用索引:

SELECT account_number 
FROM   accounts
WHERE  TO_NUMBER(account_number) = 333

答案 1 :(得分:2)

您可以使用to_number

select account_number from accounts 
where to_number(account_number) = 333