Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq与SQL以及存储过程在性能方面的比较_C#_Asp.net_Sql Server_Linq - Fatal编程技术网

C# Linq与SQL以及存储过程在性能方面的比较

C# Linq与SQL以及存储过程在性能方面的比较,c#,asp.net,sql-server,linq,C#,Asp.net,Sql Server,Linq,我使用的是SQL Server 2005数据库,我的应用程序是ASP.NET MVC4。 应用程序的业务逻辑有点复杂,包含多个表联接和搜索条件。在极端情况下,我需要连接大约10个表来获取单个网格所需的数据。 我想知道是否应该使用SPs或Linq to SQL应用程序代码来最大化我的应用程序性能。您通常会发现存储过程的性能更快,因为存储过程将在可能的情况下重复使用执行计划。Linq查询本质上是针对数据库的特殊查询,没有缓存的数据库每次都作为新请求处理。存储过程的性能通常会更快,因为存储过程将在可能

我使用的是SQL Server 2005数据库,我的应用程序是ASP.NET MVC4。 应用程序的业务逻辑有点复杂,包含多个表联接和搜索条件。在极端情况下,我需要连接大约10个表来获取单个网格所需的数据。
我想知道是否应该使用SPs或Linq to SQL应用程序代码来最大化我的应用程序性能。

您通常会发现存储过程的性能更快,因为存储过程将在可能的情况下重复使用执行计划。Linq查询本质上是针对数据库的特殊查询,没有缓存的数据库每次都作为新请求处理。

存储过程的性能通常会更快,因为存储过程将在可能的情况下重复使用执行计划。Linq查询本质上是针对数据库的特殊查询,没有缓存的数据库每次都作为新请求处理。

存储过程的性能通常会更快,因为存储过程将在可能的情况下重复使用执行计划。Linq查询本质上是针对数据库的特殊查询,没有缓存的数据库每次都作为新请求处理。

存储过程的性能通常会更快,因为存储过程将在可能的情况下重复使用执行计划。Linq查询本质上变成了针对数据库的特殊查询,没有缓存的数据库每次都作为新请求处理。

SQL Server基本上通过以下步骤执行任何查询(存储过程调用或特殊SQL语句):

  • 按语法检查查询
  • 如果可以的话-它会检查计划缓存,看看是否已经有了该查询的执行计划
  • 如果有执行计划-该计划将被(重新)使用并执行查询
  • 如果还没有计划,则确定执行计划
  • 该计划存储在计划缓存中,以供以后重用
  • 执行查询
  • 要点是:对特殊SQL和存储过程的处理没有区别

    如果即席SQL查询正确地使用了参数——不管怎样,它都应该这样做,以防止SQL注入攻击——那么它的性能特征与执行存储过程的性能特征没有什么不同
    ,而且最明显的是没有比执行存储过程更差

    存储过程还有其他好处(例如,无需授予用户直接表访问权限),但就性能而言,使用正确参数化的即席SQL查询与使用存储过程一样高效

    更新:非参数化查询上使用存储过程更好,主要原因有两个:

    • 由于每个非参数化查询对SQL Server来说都是一个新的、不同的查询,因此它必须为每个查询完成确定执行计划的所有步骤(这样既浪费了时间,也浪费了计划缓存空间,因为将执行计划存储到计划缓存中最终并没有真正的帮助,因为该特定查询可能不会再次执行)

    • 非参数化查询有遭受SQL注入攻击的风险,应该不惜一切代价避免


    SQL Server基本上通过以下步骤执行任何查询(存储过程调用或特殊SQL语句):

  • 按语法检查查询
  • 如果可以的话-它会检查计划缓存,看看是否已经有了该查询的执行计划
  • 如果有执行计划-该计划将被(重新)使用并执行查询
  • 如果还没有计划,则确定执行计划
  • 该计划存储在计划缓存中,以供以后重用
  • 执行查询
  • 要点是:对特殊SQL和存储过程的处理没有区别

    如果即席SQL查询正确地使用了参数——不管怎样,它都应该这样做,以防止SQL注入攻击——那么它的性能特征与执行存储过程的性能特征没有什么不同
    ,而且最明显的是没有比执行存储过程更差

    存储过程还有其他好处(例如,无需授予用户直接表访问权限),但就性能而言,使用正确参数化的即席SQL查询与使用存储过程一样高效

    更新:非参数化查询上使用存储过程更好,主要原因有两个:

    • 由于每个非参数化查询对SQL Server来说都是一个新的、不同的查询,因此它必须为每个查询完成确定执行计划的所有步骤(这样既浪费了时间,也浪费了计划缓存空间,因为将执行计划存储到计划缓存中最终并没有真正的帮助,因为该特定查询可能不会再次执行)

    • 非参数化查询有遭受SQL注入攻击的风险,应该不惜一切代价避免


    SQL Server基本上通过以下步骤执行任何查询(存储过程调用或特殊SQL语句):

  • 按语法检查查询
  • 如果可以的话-它会检查计划缓存,看看是否已经有了该查询的执行计划
  • 如果有执行计划-该计划将被(重新)使用并执行查询
  • 如果还没有计划,则确定执行计划
  • 该计划存储在计划缓存中,以供以后重用
  • 执行查询
  • 要点是:对特殊SQL和存储过程的处理没有区别

    如果临时SQL查询正确使用