我正在尝试优化看起来像这样的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位数使用相同的技术时,它会更快但仍然太慢。
答案 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%'进行搜索,那么您可以利用索引。