读书人

关于查询性能的有关问题

发布时间: 2013-12-04 17:21:01 作者: rapoo

关于查询性能的问题
有个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'

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

读书人网 >SQL Server

热点推荐