- 索引失效
-
隐式类型转换:表字段类型为 varchar , 查询条件为 int 型。
以 menu_order 为例
这个时候该字段类型为 int,
sql1:EXPLAIN SELECT * FROM wp_xk_product_info WHERE menu_order = '1000'
![](https://img.haomeiwen.com/i7927459/7b36f7e634fc5525.png)
sql2: EXPLAIN SELECT * FROM wp_xk_product_info WHERE menu_order = 1000
![](https://img.haomeiwen.com/i7927459/35d85ca1458b126a.png)
上面的 sql 看出,当字段类型为 int 的时候,不管过滤条件是 int 还是 string,都不会对索引造成影响。
![](https://img.haomeiwen.com/i7927459/aa97b9d0823d8abd.png)
测试字段类型现在为 varchar
sql1:
EXPLAIN SELECT * FROM wp_xk_product_info WHERE menu_order = 1000
![](https://img.haomeiwen.com/i7927459/3b4aa55497415a6f.png)
sql2:
EXPLAIN SELECT * FROM wp_xk_product_info WHERE menu_order = '1000'
![](https://img.haomeiwen.com/i7927459/5ae74530f67b98e5.png)
对比看出,当字段类型为 int 的时候,查询条件为 int or string 都能用到索引;但是当字段类型为 varchar 的时候,只有过滤条件为 varchar 的时候才能用到索引。
网友评论