版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
版权
在mysql中执行查询时,如果没有将查询条件(条件列)隔离出来,那么查询引擎则无法利用建立在该列上的索引进行数据获取.这里的"隔离"意味着查询条件字段不能作为表达式的一部分出现,所以,如果在查询语句中指定表达式条件,就必须单独将条件列置于表达式的一边.举个简单例子,
SELECT actor_id FROM sakila.actor WHERE actor_id + 1 = 5;
,mysql无法对上述的actor_id进行索引查询,尽管从人们能一眼看出actor_id为4,但是mysql不会对该表达式进行计算.这种计算完全靠你来完成的,你应该养成简化查询语句的习惯(很多很多),对于这条sql,actor_id应该单独位于等号的一边.
这里有个很常见的例子:
SELECT ... WHERE TO_DAYS(CURRENT_DATE) - TO_DAYS(date_col)