不要在索引列进行数学运算和函数运算。这是因为数学运算和函数运算会改变索引列的值,导致索引失效。
如果需要进行计算或函数处理,最好将数据取出并在应用程序中进行处理。
下面举个对照的例子:
1)看语句explain select * from test_table where type='re';的执行计划,其中没有在索引列上进行计算或函数处理:
从上面的输出可以看出,使用了索引。
2)再看语句explain select * from test_table where left(type, 2)='re';的执行计划,其中在索引列上进行了函数计算:
从上面输出可以看出,没有使用索引。