【问题标题】:Filter Performance in Cognos SUBSTRING Vs LIKECognos SUBSTRING 与 LIKE 中的过滤器性能
【发布时间】:2013-03-09 11:06:55
【问题描述】:

我现在在 cognos 10.1 中工作。

我想查找以“AB”、“CE”、“JA”开头的名称。我担心查询的性能,因为查询主题(表)包含大约 1,000,000 多条记录。我应该使用哪个过滤器?

substring ([Participant],1,2) in ('AB', 'CE', 'JA')

[Participant] like 'AB%' or [Participant] like 'CE%' or [Participant] like 'JA%'

哪个执行得更快?

【问题讨论】:

  • 那一列有索引吗?
  • @EgorSkriptunoff,不,我没有。

标签: sql performance oracle cognos cognos-bi


【解决方案1】:

您在该列上没有索引。所以优化器的唯一选择是全表扫描。坦率地说,过滤器的精确语法不会对成本产生任何影响。

正如 David 所建议的,在 substr(participant,1,2) 上构建基于函数的索引可以为您带来一些好处。但只有当您经常运行这种查询时,它才值得。

【讨论】:

    【解决方案2】:

    我过去的经验表明,如果您对以特定字符集开头的字符串感兴趣,那么 LIKE 将产生比 SUBSTR 方法更好的结果,但好处通常只出现在足够长的字符串用于优化器相信索引扫描是有益的。我记得这通常有两个以上的字符,因此您可能看不到您的情况的好处。

    使用 substr() 谓词,在没有基于函数的索引(见下文)的情况下,您可以期望的最佳索引访问类型是快速全索引扫描,这通常不如常规Like 可能允许的索引访问方法。

    但是,可以在 Substr(participant,1,2) 上定义一个可供 substr() 函数使用的基于函数的索引。仅当 substr 上的 start 和 length 参数(在您的情况下为 1 和 2 )是固定的时才值得。位图索引可能是一个不错的选择,如果表修改模式使其适合它们一般

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      相关资源
      最近更新 更多