Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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# 为什么exec sp_executesql比内联sql慢得多?_C#_Sql Server_Ado.net_Full Text Search_Sp Executesql - Fatal编程技术网

C# 为什么exec sp_executesql比内联sql慢得多?

C# 为什么exec sp_executesql比内联sql慢得多?,c#,sql-server,ado.net,full-text-search,sp-executesql,C#,Sql Server,Ado.net,Full Text Search,Sp Executesql,我在ManagementStudio中测试了这个查询,它执行得非常快(不到一秒钟) declare@p_Message_0 varchar(3)='whh' 声明@p_CreatedTime_0 datetime='2015-06-01' 从包含([Message]、@p_Message_0)和[CreatedTime]的(SELECT*FROM[Logs](nolock)中选择count(1)尝试更新统计信息。第一个使用带有今天日期的变量。变量不会被嗅探,因此您将获得猜测的分布。第二个使用参数

我在ManagementStudio中测试了这个查询,它执行得非常快(不到一秒钟)

declare@p_Message_0 varchar(3)='whh'
声明@p_CreatedTime_0 datetime='2015-06-01'

从包含([Message]、@p_Message_0)和[CreatedTime]的(SELECT*FROM[Logs](nolock)中选择count(1)尝试更新统计信息。第一个使用带有今天日期的变量。变量不会被嗅探,因此您将获得猜测的分布。第二个使用参数。这可以被嗅探

如果统计数据今天还没有更新,SQL Server会认为该日期不存在行,因此会在此基础上给出一个计划。例如,一个嵌套循环计划,估计执行TVF一次,但实际执行了多次


AKA.

将datetime列索引更改为聚集索引后,现在速度非常快,非常感谢!顺便说一句,更新Statistics并不能使其快速,我不知道为什么。如何添加针对未知linq到sql查询的优化
declare @p_Message_0 varchar(3) = 'whh'
declare @p_CreatedTime_0 datetime = '2015-06-01'

SELECT count(1) FROM (SELECT * FROM [Logs](nolock) WHERE CONTAINS([Message], @p_Message_0) AND [CreatedTime]<@p_CreatedTime_0) t
SELECT t2.* FROM (SELECT t.*,ROW_NUMBER() OVER (ORDER BY Id DESC) as rownum FROM (SELECT * FROM [Logs](nolock) t WHERE CONTAINS([Message], @p_Message_0) AND [CreatedTime]<@p_CreatedTime_0) t) t2 WHERE rownum>0 AND rownum<=20
exec sp_executesql N'SELECT count(1) FROM (SELECT * FROM [Logs](nolock) WHERE CONTAINS([Message], @p_Message_0) AND [CreatedTime]<@p_CreatedTime_0) t
SELECT t2.* FROM (SELECT t.*,ROW_NUMBER() OVER (ORDER BY Id desc) as rownum FROM (SELECT * FROM [Logs](nolock) t WHERE CONTAINS([Message], @p_Message_0) AND [CreatedTime]<@p_CreatedTime_0) t) t2 WHERE rownum>0 AND rownum<=20',N'@p_Message_0 varchar(3),@p_CreatedTime_0 datetime',@p_Message_0='whh',@p_CreatedTime_0='2015-06-01'