select * from XXCNN_AR_FIN016_MONTH_END
where period_name like '%-15'
我尝试在列期间名称上创建索引,但是成本不会降低。
此查询的成本为12702。
创建索引后,“解释计划”将显示“存储已满”选项。为此,我想问你一个问题:在创建索引之后,为什么它不显示索引扫描或其他扫描?
我该如何减少成本和时间呢?
发布于 2021-12-10 08:50:15
如果在类似的模式中指定了前导字符,则可以使用索引(对于类似于“51-%”的模式)。
解决方案是使用反向函数创建函数索引。
CREATE INDEX IDX_XXCNN_AR_FIN016_MONTH_END_reverse ON XXCNN_AR_FIN016_MONTH_END(REVERSE(period_name ));
然后查询如下:
select * from XXCNN_AR_FIN016_MONTH_END
where REVERSE(period_namex) like REVERSE('%-15');
Oracle将识别查询谓词中的反向()函数,并使用索引。
发布于 2021-12-10 08:30:20
恐怕资料太少,无法回答。
不过,您并没有说明您创建了什么样的索引。你试过基于函数的索引了吗?
CREATE INDEX i1_xx
ON xxcnn_ar_fin016_month_end (SUBSTR (period_name, -2));
并将查询重写到
SELECT *
FROM xxcnn_ar_fin016_month_end
WHERE SUBSTR (period_name, -2) = '15';
https://stackoverflow.com/questions/70301628
复制相似问题