• 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华哥")
    };

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

    心得体会

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

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

  • 相关阅读:
    【Python基础】13_Python中的PASS
    【Python基础】12_Python中的容器类型公共方法
    【Python基础】11_Python中的字符串
    【Python基础】10_Python中的字典
    【Python基础】09_Python中的元组
    【Python基础】08_Python中的列表
    【Python基础】07_Python中的模块
    Json2Html
    数字转换成美元和人民币
    单击行变色
  • 原文地址:https://www.cnblogs.com/huage-1234/p/13038870.html
Copyright © 2020-2023  润新知