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