数据库30条军规中有一条:
(25)禁止使用属性隐式转换
解读:SELECT uid FROM t_user WHERE phone=13812345678 会导致全表扫描,而不能命中phone索引,猜猜为什么?(这个线上问题不止出现过一次)
所谓猜猜为什么,那到底是为什么?
还有,mybatis 在dao层接口上入参int类型,赋给数据库varchar类型就算是产生属性隐式转换了么?
数据库30条军规中有一条:
(25)禁止使用属性隐式转换
解读:SELECT uid FROM t_user WHERE phone=13812345678 会导致全表扫描,而不能命中phone索引,猜猜为什么?(这个线上问题不止出现过一次)
所谓猜猜为什么,那到底是为什么?
还有,mybatis 在dao层接口上入参int类型,赋给数据库varchar类型就算是产生属性隐式转换了么?
查询时候索引带入表达式、函数都会导致索引失效,隐式转换相当于将索引带入函数计算了,字符集的隐式转码也会导致索引失效而进行全表查询