SQL 参数减慢查询速度

标签 sql sql-server sql-server-2008 ado.net parameterized

我有一个通过 ADO.NET 与 SQL Server 2008R2 一起使用的查询。当我内联使用 LIKE 子句时,它可以在不到一秒的时间内运行,从 200 万行中返回 5 行。如果我像在 .NET 中那样在 SSMS 中的查询开始时声明参数,则需要很长时间。

这是相同的查询,但参数化了。

第一个(效果很好)是(效果很好):

;WITH Results_CTE AS (
    SELECT  ld.* , ROW_NUMBER() OVER (ORDER BY PK_ID) AS RowNum  
    FROM list..List_Data ld 
    WHERE Name IS NOT NULL  AND 
    Postcode LIKE 'SW14 1xx%' 
) SELECT * FROM Results_CTE 

第二个永远需要的是:

declare @postcode varchar(10) = 'SW14 1xx'
;WITH Results_CTE AS (
    SELECT  ld.* , ROW_NUMBER() OVER (ORDER BY PK_ID) AS RowNum  
    FROM list..List_Data ld
    WHERE Name IS NOT NULL  AND 
    Postcode LIKE @postcode +'%' 
) SELECT * FROM Results_CTE 

我相信这与 SQL Server 的内部工作原理有关,但我真的不知道。

最佳答案

我在谷歌上搜索 C# 中 SqlCommand.Parameters.Add() 的潜在问题,并找到了此页面。我知道这是一篇 SQL Server 帖子,但其他人可能会通过 google 找到它,并且它可能会对他们使用 C# 有所帮助。

对我来说,以上答案都不起作用,所以我尝试了另一种方法。

而不是:

cmd.Parameters.Add(new SqlParameter("@postcode", postcode));

我用这个代替:

// Replace SqlDbType enumeration with whatever SQL Data Type you're using.
cmd.Parameters.Add("@postcode", SqlDbType.VarChar).Value = postcode;

不要忘记命名空间:

using System.Data;

希望这对某人有帮助!

关于SQL 参数减慢查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7874109/

相关文章:

c# - Entity Framework 4.1 幽灵列

sql - 从一个巨大的封闭工作簿中抓取和过滤超过 255 列

sql - 在 SQL Server 中循环遍历行并自动为每一行添加一个列号

sql-server - 是否有可能获得与语言无关的 "NT AUTHORITY\NETWORK SERVICE"用户?

sql-server-2008 - 使用 Windows 身份验证从经典 ASP 连接到 SQL Server 数据库

MySQL 查找字符串中的第一个小写字母

sql-server - 有关 SQL Server Compact Edition 3.5 的基本问题

sql-server - SQL Server 中的 TrimTrailingBlanks

sql-server-2008 - 将维护计划从一个 Sql Server 2008 实例迁移到另一个

sql-server - 如何将参数传递给将执行存储过程的 SQL 作业