使用Oracle中的索引反转字符串

Tyl*_*ith 1 oracle indexing reverse oracle10g

我有一个具有ID和字符串的表,我需要能够正确索引以搜索字符串的结尾.我们当前如何处理它是将信息复制到另一个表并反转每个字符串并正常索引它.我想做的是使用某种允许反向搜索的索引.

Data: 
F7421kFSD1234 
d7421kFSD1235 
F7541kFSD1236 
d7421kFSD1234
F7421kFSD1235 
b8765kFSD1235 
d7421kFSD1234
Run Code Online (Sandbox Code Playgroud)

我们的用户通常输入他们的搜索方式是......

*1234

通过反转字符串(以及搜索字符串:4321*),我可以找到我要查找的内容,而无需完全扫描整个表格.我的问题是:制作第二张桌子是最好的方法吗?

有没有办法扭转指数?我试过像这样的索引......

create index REVERSE_STR_IDX on TABLE(STRING) REVERSE;
Run Code Online (Sandbox Code Playgroud)

但根据解释计划,oracle似乎没有使用它.

在此先感谢您的帮助.


更新:

我确实遇到了unicode字符无法正确反转的问题.对此的解决方案是铸造它们.

例:

select REVERSE(cast(string AS varchar2(2000)))
from tbl 
where id = 1
Run Code Online (Sandbox Code Playgroud)

Mar*_*and 8

有一个神话,可以使用反向键索引,但是,我从未见过这一点.

我会尝试一个基于"手动"功能的索引.

CREATE INDEX REVERSE_STR_IDX on TBL(reverse(string));

SELECT *
  FROM TBL
 WHERE reverse(string) LIKE '4321%';
Run Code Online (Sandbox Code Playgroud)

  • 同意.反向键索引是针对特定用例而设计的 - 消除了顺序索引值(右腿索引)周围的块争用.优化器拒绝考虑对反向键索引使用范围扫描. (2认同)