相关疑难解决方法(0)

加速sql JOIN

首先,一些背景.

我们有一个订单处理系统,员工在应用程序中输入有关订单的帐单数据,该应用程序将其存储在sql server 2000数据库中.这个数据库不是真正的计费系统:它只是一个保留位置,因此记录可以通过夜间批处理进入大型机系统.

此批处理过程是由外部供应商提供的固定第三方软件包.它应该做的部分工作是为任何被拒绝的记录提供报告.拒绝报告是手动完成的.

不幸的是,事实证明第三方软件没有捕获所有错误.我们有单独的进程将数据从大型机拉回到数据库中的另一个表中,并将被拒绝的费用加载到另一个表中.

然后运行审计流程以确保工作人员最初输入的所有内容都可以在某处进行说明.此审计采用我们运行的SQL查询的形式,它看起来像这样:

SELECT *
FROM [StaffEntry] s with (nolock)
LEFT JOIN [MainFrame] m with (nolock)
    ON m.ItemNumber = s.ItemNumber 
        AND m.Customer=s.Customer 
        AND m.CustomerPO = s.CustomerPO -- purchase order
        AND m.CustPORev = s.CustPORev  -- PO revision number
LEFT JOIN [Rejected] r with (nolock) ON r.OrderID = s.OrderID
WHERE s.EntryDate BETWEEN @StartDate AND @EndDate
    AND r.OrderID IS NULL AND m.MainFrameOrderID IS NULL
Run Code Online (Sandbox Code Playgroud)

当然,这有很大的改变,但我相信重要的部分是有代表性的.问题是这个查询开始运行时间太长,我正在试图弄清楚如何加快它.

我很确定问题是从StaffEntry表到MainFrame表的JOIN .由于两者都是从时间开始(本系统中的2003年)开始保存每个订单的数据,因此它们往往有点大.导入到大型机时,表中使用的OrderIDEntryDateStaffEntry不会被保留,这就是为什么该连接稍微复杂一些.最后,因为我在MainFrame表中查找不存在的记录,所以在执行JOIN之后我们 …

sql sql-server performance join sql-server-2000

2
推荐指数
1
解决办法
5969
查看次数

标签 统计

join ×1

performance ×1

sql ×1

sql-server ×1

sql-server-2000 ×1