sqlParameters vs string.Format哪个更适合提速?

时间:2014-10-02 11:25:02

标签: c# .net performance ado.net

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;

3 个答案:

答案 0 :(得分:2)

在几乎所有情况下,使用参数都是更快:用于优化RDMS的一个和相同的 SQL:

  INSERT INTO tbl_test 
       VALUES(@a, @b)

因此服务器可以解析并优化查询一次,然后运行它。相反,如果您不使用参数,RDMS必须解析并优化许多略有不同的查询:

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

并且常量解析/优化非常耗时。

答案 1 :(得分:1)

首先,两者都是不同的东西,第二个很容易进行SQL注入,而第一个则容易进行SQL注入。

其次,使用参数还允许SQL Server利用缓存的查询计划。

有关详细信息,请参阅此链接 - link

答案 2 :(得分:1)

使用参数肯定更快。

  • 如果您正在使用string.Format,则数据库服务器将处理每个和{ 每个陈述都是新的。这意味着:声明必须是 编译和优化然后执行。
  • 用于查询 参数,编译/优化只发生一次,然后是 结果被缓存,当下一个这样的语句到达时, 预编译的查询将被重用。