日期:2014-05-17  浏览次数:20528 次

关于查询性能的问题
有个Custoemer表,CustomerID为Int类型,如果查询语句为 Where CustomerID=1 和 Where CustomerID='1'和 Where CustomerID=N'1'  。这三种写法性能一样吗?环境是SQL2008R2。

------解决方案--------------------
不一样,会有类型隐式转换,通常会引起无法使用索引,最好使用和数据列相同类型的查询参数
------解决方案--------------------
当然不一样,而且影响会很大
尤其是变量的优先级比字段的低的时候。

严格控制两边的类型要一致

------解决方案--------------------
采用第1种把。

Where CustomerID=1 和 Where CustomerID='1'和 Where CustomerID=N'1'  

第2、3种,都是字符串,而你的CustomerID是int型,所以在查询时会导致隐式数据类型转化,表面上看上去,好像也没什么问题。

但如果你给customerID字段上,建立了索引,那么第2、3种的方式,就会导致用不上索引,因为,数据类型不同,隐式转化了,相当于这样:

where cast(CustomerID as varchar) = '1' 
where cast(CustomerID as varchar) = N'1'

所以,当数据量大的时候,会导致性能问题