2014-10-02 76 views
1

sqlParameters vs string.Format哪個更適合速度增加?sqlParameters vs string.Format哪個更適合速度提升?

而不承擔安全

cmd.CommandText = "INSERT INTO tbl_test VALUES(@a, @b);"; 
SqlParameter SqlParameter[] sqlParameters = new SqlParameter[2]; 
sqlParameters[0] = new SqlParameter("@a", SqlDbType.VarChar); 
sqlParameters[0].Value = varA; 
sqlParameters[1] = new SqlParameter("@b", SqlDbType.VarChar); 
sqlParameters[1].Value = varB; 

VS

string query = string.Format("INSERT INTO tbl_test VALUES({0},{1});", varA, varB); 
cmd.CommandText = query; 
+0

使用參數是一種安全的做事方式。 使用該字符串可能會導致SQL注入。這並不能回答你的問題,但我總是會選擇第一個選項,因爲時間不夠緊張。 – 2014-10-02 11:26:47

+3

在幾乎所有情況下使用參數都更快:RDMS有一個相同的SQL進行優化,對於每個值組合,查詢都沒有多少稍微不同的查詢 – 2014-10-02 11:28:23

+0

任何人都比另一個快多少?我不認爲會有任何顯着的差異。 – 2014-10-02 11:29:44

回答

2

使用的參數是在幾乎所有情況下更快:有同一個 SQL的關係數據庫管理系統優化:

INSERT INTO tbl_test 
     VALUES(@a, @b) 

所以服務器可以解析和優化查詢一次然後就是運行它。相反,如果不使用參數,關係數據庫管理系統必須解析和優化許多略有不同的查詢這樣的:

INSERT INTO tbl_test 
     VALUES(1, 2) 
    ... 
    INSERT INTO tbl_test 
     VALUES(3, 4) 
    ... 
    INSERT INTO tbl_test 
     VALUES(100, 101) 

不斷解析/優化非常耗時。

1

首先,兩者是不同的東西,第二屆一個很容易受到SQL注入,而第一次一個防止。

其次,使用參數還允許SQL Server利用緩存的查詢計劃。

欲瞭解更多信息,請參閱該鏈接 - link

1

使用參數肯定更快。

  • 如果您使用string.Format,數據庫服務器將認真對待每 每一個語句作爲新的。這意味着:該語句必須被編譯並優化,然後執行 。
  • 對於具有 參數的查詢,編譯/優化只發生一次,然後 結果被緩存,並且當下一個這樣的語句到達時,將重用預編譯查詢。