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

因為數據庫中的中文是兩個字節,英文是一個字節,所以這邊參數的大小我們最好使用取參數的字節數

心得體會

  善於發現一些問題,這樣才能使自己提高,不能為了會用而自得,要為得心應手找方法。

  萬丈高樓平地起,也要靠積累

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM