一、如果表定义的是varchar字段,传入的是数字,则会发生隐式转换。

  1、表DDL

p_w_picpath2016-5-27%2016%3A9%3A27.png?version

2、传int的sql

p_w_picpath2016-5-27%2016%3A10%3A11.png?versio

3、传字符串的sql

p_w_picpath2016-5-27%2016%3A10%3A49.png?versio

仔细看下表结构,rid的字段类型: p_w_picpath2016-5-27%2016%3A9%3A38.png?version

而用户传入的是int,这里会有一个隐式转换的问题,隐式转换会导致全表扫描。

把输入改成字符串类型,执行计划如下,这样就会很快了。

此外,还需要注意的是:

数字类型的0001等价于1

字符串的0001和1不等价


二、如果表定义的是int字段,传入的是字符串,在不超过int范围内,不会发生隐式转换,如果超出范围并且比较大小(以字符串类型比较'$')会隐式转换。

1、表DDL

p_w_picpath2016-5-27%2016%3A13%3A26.png?versio

2、不超范围传字符串的sql

p_w_picpath2016-5-27%2016%3A14%3A44.png?versio

3、不超范围传数字的sql

p_w_picpath2016-5-27%2016%3A15%3A8.png?version

 

4、超出范围传字符串的sql

p_w_picpath2016-5-27%2016%3A23%3A10.png?versio

p_w_picpath2016-5-27%2016%3A24%3A46.png?versio

5、超出范围传数字的sql

p_w_picpath2016-5-27%2016%3A23%3A56.png?versio

p_w_picpath2016-5-27%2016%3A25%3A6.png?version