优化字符串搜索Oracle查询

Ove*_*119 1 oracle optimization

我正在尝试优化看起来像这样的Oracle Query:

select * from upcTable where upc like '%567%'
Run Code Online (Sandbox Code Playgroud)

对于像567这样的小搜索术语,查询速度很快,但它可以长达15位数,其中可能需要约1.5秒.反正有加速吗?

我试过做类似的事情

select * from
(select * from rldb.productmaster where upc like '%567%')
where upc like '%380%'

select * from rldb.productmaster where upc like '%567380%'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,术语的数量大致相同,但第一个例子有点快.然而,当使用相同的技术15位数时,它会更快但仍然太慢.

Ton*_*ews 5

如果您将列索引如下:

create index upcIndex on upcTable (upc, pk);
Run Code Online (Sandbox Code Playgroud)

(pk表的主键在哪里)

那么这个查询可以对该索引执行INDEX FAST FULL SCAN:

select pk from upcTable where upc like '%567380%';
Run Code Online (Sandbox Code Playgroud)

如果你真的需要所有列(选择*),那么你可以试试这个:

select * from upcTable where pk in
(select pk from upcTable where upc like '%567380%');
Run Code Online (Sandbox Code Playgroud)