gpt4 book ai didi

sql - 使用链接服务器优化 SQL 查询

转载 作者:行者123 更新时间:2023-12-03 16:53:33 25 4
gpt4 key购买 nike

我有一个 SQL 查询,它用于为报告提取数据。它有效,只是程序拉取报告花费的时间太长。有什么方法可以优化这个 SQL 吗?这是一个具有多个子查询的 SELECT 查询,使用名为 SYSPROD1 的链接服务器。我试过但没有成功。这是我的 SQL:

Select   
invMaster.StockCode, prodclass.[Description], invMaster.LongDesc,
(select inv.QtyOnHand from SYSPROD1.SysproCompanyD.dbo.InvWarehouse inv where inv.StockCode = invMaster.StockCode and inv.Warehouse = 'P4') as CSSJHB,
(select inv.QtyOnHand from SYSPROD1.SysproCompanyD.dbo.InvWarehouse inv where inv.StockCode = invMaster.StockCode and inv.Warehouse = 'KK') as KFCJHB,
(select inv.QtyOnHand from SYSPROD1.SysproCompanyD.dbo.InvWarehouse inv where inv.StockCode = invMaster.StockCode and inv.Warehouse = 'KF') as KFCMIDRAND,
(select inv.QtyOnHand from SYSPROD1.SysproCompanyD.dbo.InvWarehouse inv where inv.StockCode = invMaster.StockCode and inv.Warehouse = 'QK') as QKJHB,
(select inv.QtyOnHand from SYSPROD1.SysproCompanyD.dbo.InvWarehouse inv where inv.StockCode = invMaster.StockCode and inv.Warehouse = 'SD') as SDBBLOEM,
(select inv.QtyOnHand from SYSPROD1.SysproCompanyD.dbo.InvWarehouse inv where inv.StockCode = invMaster.StockCode and inv.Warehouse = 'SL') as SEQUENCE,
(select inv.QtyOnHand from SYSPROD1.SysproCompanyD.dbo.InvWarehouse inv where inv.StockCode = invMaster.StockCode and inv.Warehouse = 'PA') as CSSCT,
(select inv.QtyOnHand from SYSPROD1.SysproCompanyD.dbo.InvWarehouse inv where inv.StockCode = invMaster.StockCode and inv.Warehouse = 'VL') as CSGEORGE



from
SYSPROD1.SysproCompanyD.dbo.InvMaster invMaster join SYSPROD1.SysproCompanyD.dbo.SalProductClass prodclass
on invMaster.ProductClass = prodclass.ProductClass

where prodclass.[Description] in ('WHOLEBIRDS','ABI & OTHER', 'CATERING PORTIONS', 'FILLETED PRODUCTS', 'FRESH PRODUCTS','INDUSTRIAL CATERING', 'IQF PORTIONS', 'LOW VALUE FIXED MASS', 'RED MEAT', 'REJECT EGGS' ,'SUNDRY PRODUCTS','VALUE ADDED')
group by invMaster.StockCode, prodclass.[Description], invMaster.LongDesc

order by prodclass.[Description], invMaster.StockCode asc

最佳答案

您在此处编写的那种链接服务器查询(连接了远程服务器上的多个表)通常性能不佳,因为 SQL 引擎无法使用它用来优化本地查询计划的许多技巧;例如,除非用于连接到链接服务器的安全上下文是 sysadmindb_ownerdb_ddladmin 角色的成员,the calling server has no access to the table statistics .此查询的计划很可能会提取 SYSPROD1.SysproCompanyD.dbo.InvMasterSYSPROD1.SysproCompanyD.dbo.SalProductClassSYSPROD1.SysproCompanyD 的全部内容.dbo.InvWarehouse 在执行查询期间多次返回到调用机器,正是这个占用了时间。

您有几个选项可以尝试提高此查询的性能。一种是将链接服务器上每个表中所需的行插入到临时表或表变量中,然后再将它们加入查询。

第二,考虑到链接服务器上的表可以满足整个查询,将把它创建为该服务器上的 View ——这意味着所有处理都在那里进行,并且应该更有效率.

关于sql - 使用链接服务器优化 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10204498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com