【发布时间】:2015-09-14 16:01:16
【问题描述】:
由于此参数查询,我的报告运行速度非常慢,因为我认为我在使用 SUBSTRB 时丢失了索引
select distinct SUBSTRB(BLD_YEAR_PERIOD,1,4) as BLD_YEAR_PERIOD
from example.table
where SUBSTRB(BLD_YEAR_PERIOD,1,4) >= 2010
and SUBSTRB(BLD_YEAR_PERIOD,5,2) = 01
order by BLD_YEAR_PERIOD
关于其他方式的任何建议。
【问题讨论】:
-
比较快慢查询计划。有什么不同?是的,SUBSTRB 将停止使用
BLD_YEAR_PERIOD上的索引如果存在。你也有一些隐式转换。您应该比较字符串而不是数字。这也相当于BLD_YEAR_PERIOD= '201001'不需要该功能。 -
是否有任何特殊原因您使用字节方式子字符串函数而不是普通的
SUBSTR函数? -
您已评论数据类型为数字。那你为什么不能用这个:
where BLD_YEAR_PERIOD = 201001 -
因为我在 SSRS 中使用它作为参数来选择多个日期,所以我想要每个以 01 结尾的不同日期选项
-
我只是注意到年份过滤器不是一个相等谓词。基于函数的索引可能仍然有帮助,但这里的一个重要问题是,该查询通常返回的表中行的百分比大约是多少?如果它超过表的 5%,我通常希望 Oracle 无论如何都会进行完整扫描。
标签: sql oracle indexing substring