加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server-2005 – 为什么SQL Server在运行参数化查询时不会使

发布时间:2020-12-30 16:10:00 所属栏目:编程 来源:网络整理
导读:当我在SQL Server 2005中执行以下查询时,它行使索引查找,通过查察执行打算举办验证. SELECT *FROM AccountWHERE Number = '123456789' 可是当我运行沟通的查询但行使参数时,它行使索引扫描. DECLARE @AccountNumber NVarChar(25)SET @AccountNumber = '123456

当我在SQL Server 2005中执行以下查询时,它行使索引查找,通过查察执行打算举办验证.

SELECT *
FROM   Account
WHERE  Number = '123456789'

可是当我运行沟通的查询但行使参数时,它行使索引扫描.

DECLARE @AccountNumber NVarChar(25)
SET @AccountNumber = '123456789'

SELECT *
FROM   Account
WHERE  Number = @AccountNumber

因为此表有高出1000万行,因此第二个查询必要30秒以上,而第一个查询只需几毫秒.我是否真的必需将我的全部查询变动为不行使参数?

办理要领

行使常量和变量之间存在差别,由于简朴地说,SQL Server会实行针对一样平常环境举办优化.

可是,在这种环境下,我起首想到的是数据范例优先级导致隐式转换.数字列是什么数据范例?

示例:说它是varchar(25). nvarchar具有比varchar更高的优先级,因此在较量之前隐式转换列.

我最近通过较量varchar和SUSER_SNAME被咬了.我应该知道更好.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读