Kan*_*ves 3 t-sql sql-server optimization performance
我有一个简单的SELECT语句,该WHERE子句中引用了几列。通常,我在VB代码中执行这些简单的操作(设置Command对象,将Command Type设置为text,将Command Text设置为Select语句)。但是我看到超时问题。我们已经对表格等进行了几乎所有的优化。
我想知道是否会因为我以这种方式进行查询而不是创建带有几个参数的简单存储过程而对性能造成重大影响。我在想,也许内联代码会强制SQL进行额外的工作编译,创建查询计划等,如果使用存储过程,则不会发生这种情况。
正在运行的实际SQL的示例:
SELECT TOP 1 * FROM MyTable WHERE Field1 = @Field1 ORDER BY ID DESC
Run Code Online (Sandbox Code Playgroud)
格式正确的“内联”或“即席” SQL查询(如果与参数正确配合使用)与存储过程一样好。
但这绝对至关重要:您必须使用正确的参数化查询!如果您不这样做-如果将每个请求的SQL连接在一起-那么您就不会从这些方面受益...
就像存储过程一样,在第一次执行时,必须找到查询执行计划-然后将该执行计划缓存在计划缓存中-就像存储过程一样。
如果您多次调用内联参数化的SQL语句,则该查询计划将被反复使用-并且“内联” SQL查询计划将遵循与存储过程的执行计划相同的缓存逐出策略。
仅从这种角度来看-如果您确实使用了正确的参数化查询-存储过程没有任何性能上的好处。
存储过程还有其他好处(例如,作为“安全边界”等),但是原始性能并不是它们的主要优点之一。