优化字符串搜索Oracle查询

时间:2011-06-15 13:12:27

标签: oracle optimization

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

select * from upcTable where upc like '%567%'

对于像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%'

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

2 个答案:

答案 0 :(得分:5)

如果您将列索引为:

create index upcIndex on upcTable (upc, pk);

(其中pk是表格的主键)

然后此查询可以对该索引执行INDEX FAST FULL SCAN:

select pk from upcTable where upc like '%567380%';

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

select * from upcTable where pk in
(select pk from upcTable where upc like '%567380%');

答案 1 :(得分:1)

您将不会使用任何执行'%123%'(领先%)的索引。如果您可以使用'123%'进行搜索,那么您可以利用索引。