首页 > 数据库 > mysql教程 > 为什么我的 SQL 查询在 SSMS 中很快,但在 ASP.NET 中却很慢?

为什么我的 SQL 查询在 SSMS 中很快,但在 ASP.NET 中却很慢?

Linda Hamilton
发布: 2024-12-31 21:54:14
原创
957 人浏览过

Why is my SQL query fast in SSMS but slow in ASP.NET?

了解 SSMS 和 ASP.NET 之间的 SQL 性能差异

在 SSMS 中执行 SQL 查询时,您会遇到显着的性能差异到 ASP.NET。如下所示的查询在 SSMS 中运行只需几秒钟,但在您的网站上则需要几分钟。

DECLARE @customerID INT
SET @customerID = @CustID
DECLARE @MyTable table(
Iden int NOT NULL IDENTITY(1,1),
ProductID int)

INSERT INTO @MyTable(ProductID)
SELECT P.ProductID FROM Product P WITH (NOLOCK)
left join Compunix_ProductMMY cpmmy with (nolock) on p.ProductID = cpmmy.ProductID
left join Compunix_CustomerMMY ccmmy with (nolock) on ccmmy.mmyid = cpmmy.mmyid
WHERE P.Deleted=0 AND P.Published=1 and (ccmmy.customerid = @customerID OR cpmmy.productid IS NULL)

SELECT c.Name, c.SeName, c.CategoryID
FROM Category c WITH (NOLOCK) 
JOIN ProductCategory PC With (NOLOCK) ON C.CategoryID = PC.CategoryID
JOIN @MyTable MT ON PC.ProductID=MT.ProductID
WHERE C.Published = 1
GROUP BY c.Name, c.SeName, c.CategoryID
ORDER BY c.Name
登录后复制

罪魁祸首:参数嗅探

The造成这种差异的最可能原因是参数嗅探。参数嗅探是一种性能优化技术,SQL Server 在第一次执行时分析查询参数,并根据这些参数创建执行计划。如果稍后查询参数发生更改,SQL Server 可能不会重新编译执行计划并继续使用原始计划,这对于新参数可能不是最佳的。

在这种情况下,查询性能可能会下降,因为首次使用特定 @CustID 值运行查询时优化的执行计划对于使用不同 @CustID 值的后续运行来说并不理想。

解决问题

为了减轻参数嗅探,您可以在查询中使用 FORCESEEK 提示。这会强制 SQL Server 为每次执行查询创建一个新的执行计划,确保它使用给定参数的最佳计划。

要解决此问题,请按如下方式修改查询:

DECLARE @customerID INT
SET @customerID = @CustID
DECLARE @MyTable table(
Iden int NOT NULL IDENTITY(1,1),
ProductID int)

WITH (FORCESEEK)
INSERT INTO @MyTable(ProductID)
SELECT P.ProductID FROM Product P WITH (NOLOCK)
left join Compunix_ProductMMY cpmmy with (nolock) on p.ProductID = cpmmy.ProductID
left join Compunix_CustomerMMY ccmmy with (nolock) on ccmmy.mmyid = cpmmy.mmyid
WHERE P.Deleted=0 AND P.Published=1 and (ccmmy.customerid = @customerID OR cpmmy.productid IS NULL)

SELECT c.Name, c.SeName, c.CategoryID
FROM Category c WITH (NOLOCK) 
JOIN ProductCategory PC With (NOLOCK) ON C.CategoryID = PC.CategoryID
JOIN @MyTable MT ON PC.ProductID=MT.ProductID
WHERE C.Published = 1
GROUP BY c.Name, c.SeName, c.CategoryID
ORDER BY c.Name
登录后复制

以上是为什么我的 SQL 查询在 SSMS 中很快,但在 ASP.NET 中却很慢?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板