【问题标题】:sqlParameters vs string.Format which is better for speed increase?sqlParameters 与 string.Format 哪个更适合提高速度?
【发布时间】:2014-10-02 20:03:24
【问题描述】:

sqlParameters 与 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;

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

【问题讨论】:

  • 使用参数是一种安全的做事方式。使用该字符串,您有 SQL 注入的风险。这不能回答你的问题,但我总是会选择第一个选项,因为秒是不受欢迎的。
  • 在几乎所有情况下使用参数都更快:有一个相同的 SQL 用于 RDMS 优化,每个值组合的查询略有不同
  • 有人比其他人快多少?我认为不会有任何显着差异。
  • 没有人提到racing horses?

标签: c# .net performance ado.net


【解决方案1】:

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

  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)

并且不断的解析/优化很耗时。

【讨论】:

    【解决方案2】:

    首先,两者是不同的东西,第二个容易发生 SQL 注入,而第一个可以防止这种情况。

    其次,使用参数还可以让 SQL Server 利用缓存的查询计划。

    更多信息,请参考这个链接——link

    【讨论】:

      【解决方案3】:

      使用参数肯定更快。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-13
        • 2012-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多