为什么where fdate between trunc(sysdate, 'mm') and sysdate走索引,
而 把trunc(sysdate, 'mm')改成trunc(sysdate, '4个y') 却索引失效了呢?(这里提问只能写4个y了,不然无法发布)
怎么解决这个问题呢
条件里面加了函数之后会导致索引失效(不走索引)
楼上说的不太对吧。题主的意思是mm是可以走索引,而4y不走索引。是因为当条件是mm的时候,你筛选的数据量占全表的总数的比例是少于4y的时候,oracle这个时候会自动判断使用索引的效率更高,索引当mm的时候会帮你走索引,如果是4y的时候,查询的结果是比mm的时候多,oracle判断出此时走全表扫描更好,就自动帮你走全表扫描了。
举个栗子:where条件是mm的时候,100万条数据筛选出2000条,就会走索引,而如果where条件是4y,查询结果是50万条,那这个时候走索引性能还不如走全表扫描,oracle就会走全表扫描了。