【问题标题】:how to optimize contains in oracle sql query如何优化oracle sql查询中的包含
【发布时间】:2015-09-27 20:56:31
【问题描述】:

我需要在这样的查询中使用 oracle Contains 函数:

select *
  from iindustrialcasehistory B
  where CONTAINS(B.ItemTitle, '%t1%') > 0 OR
        CONTAINS(B.ItemTitle, '%t2%') > 0

我已经为 ItemTitle 列定义了上下文索引,但是执行时间大约是一分钟!而我需要它在不到一秒的时间内执行! 感谢您提供任何减少执行时间的高级指南!

【问题讨论】:

  • 您是否定期分析和优化您的索引?
  • IINDUSTRIALCASEHISTORY 表中有多少行?
  • 你可以试试WHERE CONTAINS(B.ItemTitle, 't1 | t2') > 0
  • 我没有分析定义的索引,如果可以解释怎么做? IINDUSTRIALCASEHISTORY 目前包含 100 万条记录。使用 WHERE CONTAINS(B.ItemTitle, 't1 | t2') > 0 有相同的结果

标签: oracle query-optimization contains


【解决方案1】:

包含搜索字符串中所有出现的子字符串,这就是为什么最好使用 instr() 代替,因为它只搜索第一次出现的子字符串,应该更快。

然后你可以为函数 Instr(B.ItemTitle,'t1') + Instr(B.ItemTitle,'t1') 建立索引。

然后在查询中使用这个函数值 > 0。 您可以查看更多有关使用 instr 函数 here 的索引的详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多