Cognos SUBSTRING Vs LIKE中的过滤器性能



我现在正在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%'

哪个执行得更快?

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

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

但是,可以在Substr(participant,1,2)上定义一个基于函数的索引,供Substr()函数使用。只有当substr上的start和length参数(在您的例子中是1和2)固定时,才值得这样做。如果表修改模式通常适合位图索引,那么位图索引可能是一个不错的选择

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

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

最新更新