索引的使用
能使用索引的情况:Like前导字符,比如c like 'DBA%',这样可以使用c列的索引;
不能能使用索引的情况:Like非前导字符,比如c like '%DBA',这样不可以使用c列的索引
原因
因为索引是顺序的是按照字母的顺序储存的。比如:a11 a21d11 a31在索引中储存的顺序为
a11 a21 a31 d11,所以用like匹配,只能使用前导匹配。所以再用like语句筛选数据的时候尽量将%写在后面。
优化
如果不得不写在前面且又想采用索引的话,可以使用以下几个方式进行优化,思路基本上都是建立函数索引:
转换成制定的函数
如筛选 c like '%1',如果有索引,建议将substr换成like,建立函数索引substr(c,2,1) ,然后将like '%1'改写为substr(c,2,1)=1。
翻转函数索引
反转索引:当语句为c like '%abc'时,其可以转换为reverse index(c) like 'cba%',那么针对上例中,如果建立函数索引reverse(c),其在所以中储存的值为11a 11d 12a 13a,那么此时就可以将 c like '%1',转化为reserve(c) like '1%'.
但是对于'%1%',此方法不适用。