sql - 查询调优和优化
问题描述
我是 TSQL 的初学者。这是问题。如何优化下面的查询并缩短执行时间?该 SP 在光标内执行,但只允许修改该部分。我正在考虑使用临时表。谢谢
CREATE PROCEDURE dbo.GetProductFromHistory
@ProductID INT
AS
BEGIN
DECLARE @Result TABLE(
PurchaseOrderNumber NVARCHAR(25),
TransactionID INT
)
INSERT INTO @Result(PurchaseOrderNumber, TransactionID)
SELECT soh.PurchaseOrderNumber, th.TransactionID
FROM Production.TransactionHistory th
INNER JOIN Sales.SalesOrderHeader soh on th.ReferenceOrderID = soh.SalesOrderID
WHERE th.ProductID = @ProductID;
END
GO
解决方案
你无能为力。在游标循环中运行 SP 完全不是你这样做的方式,并且会使事情变得非常缓慢,但你按照自己的话来说是不允许改变这个事实的。
假设您有一个 ID 并且还定义了输出 - 这是一个很简单的 select 语句,并且您无法在此代码上进行任何优化。显然,两个相关字段(th.ProductID 和 th.ReferenceOrderID 和 soh.SalesOrderID)上都应该有一个索引,但话又说回来,这不是查询的一部分(但我通常经常看到的错误)。
这里的症结在于,将这个 SP 放在循环中是让它变慢的原因,而不是你拥有的小代码。
推荐阅读
- assembly - 为什么没有设置进位标志?
- javascript - 从另一个页面上的触发器加载页面后是否可以执行代码?JS
- websphere-liberty - 在 websphere liberty 中获取数据源连接
- ios - SwiftUI - 使用淡入淡出动画更改文本
- azureservicebus - QueueClient 获取预定消息
- shell - 如何在以更高权限运行的 Window 上设置 HWND_TOPMOST?
- javascript - 循环遍历对象数组并使用 Javascript 在 HTML 中一次仅显示对象属性
- python - 如何将数据从 csv 文件导入和导出到 HTML?
- node.js - 使用 Node.js 和 MongoDB 限制返回的文档
- r - 要替换的项目数不是替换长度错误的倍数