之前的印象中,字段上使用了函数操作,查询不会走索引。
一,AI回答
回答1
回答2
回答3
二,测试样例
查询未来n天内所有数据
查询方式1
EXPLAIN SELECT
*
FROM
vehicle_info
WHERE
annual_inspection_due_date BETWEEN NOW( )
AND DATE_ADD( NOW( ), INTERVAL 90 DAY );
查询方式2
EXPLAIN SELECT
*
FROM
vehicle_info
WHERE
DATEDIFF( annual_inspection_due_date, NOW( ) ) < 90 AND DATEDIFF( annual_inspection_due_date, NOW( ) ) >=0
索引分析
不加索引时
结果1
结果2
加索引时
结果1
结果2
索引分析
从四个结果看得出一下结论
1.不加索引,肯定都不走索引,废话
2.加索引时,结果1走了索引,查询结果30条数据,即rows = 30
rows含义:表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数
查询2是全表扫描。
三,结论
sql到底是否走索引,用explain调试,看结果,调整到最优