只是一个简单的问题,如何在此查询中创建基于函数的索引。
select * from mytable A where :var1 like A.fld1 || '%';
mytable在fld1上有一个普通的非唯一索引。
答案 0 :(得分:1)
您不在查询上创建基于函数的索引,而是在函数上创建它。你拥有的是一个操作员,而不是一个功能。
你想要做的是找到表中fld1与var1开始的字符匹配的所有行,并且帮助你的那个行只是fld1上的一个。您可能希望的最佳计划可能是快速全索引扫描,因为这不适用于范围扫描。
答案 1 :(得分:0)
好吧,你可以为你在查询中使用的表达式创建一个基于函数的索引:
create index myindex on mytable (fld1 || '%');
但是,这个查询不太可能带来任何好处。我会说fld1上你正常的非唯一索引和基于函数的索引一样好。