C#中参数化查询速度慢的原因

 今天同事问了一个很有意思的问题,为啥我执行的Sql在数据库里面执行的很快,在程序中运行的速度怎么能这么慢?

真实案例(只是查询语句不是这么简单):

同事:你看我执行的语句在SQLserver中执行的有多快 

   语句:select  a.id,b.id,a.其他列 from a left join b on a.bid=b.id where a.name='huage'

我说:你别光看语句啊,之前sql语句拼接字符串才是这样的执行语句啊。你看语句监视看看,到底执行的是什么语句

同事:exec sp_executesql N'select a.id,b.id,a.其他列 from a left join b on a.bid=b.id where a.name=@name',N'@name nvarchar(5)',@name=N'huage' 语句是这个啊,参数化执行跟我之前的拼接sql没区别啊?

我说:你把这个放到查询里面看看,执行起来咋样?

同事:复制粘贴,哎呀妈呀,真nm的慢?咋回事啊?

我说:你把那个参数的类型改成varchar看看

同事:哎呦我去,就去掉了个n,这速度能提这么快?

我说:这边查询最好根据数据库字段的声明类型来设置类型,根据实际的字符大小来设置大小,这样才不会出现‘卡顿’的Sql

总结方法

参数化查询的时候,我们可以使用 

new SqlParameter("@name", "1212华哥")

{
SqlDbType = SqlDbType.VarChar,
Size=System.Text.Encoding.Default.GetByteCount("1212华哥")
};

因为数据库中的中文是两个字节,英文是一个字节,所以这边参数的大小我们最好使用取参数的字节数

心得体会

  善于发现一些问题,这样才能使自己提高,不能为了会用而自得,要为得心应手找方法。

  万丈高楼平地起,也要靠积累

原文地址:https://www.cnblogs.com/huage-1234/p/13038870.html