重现步骤

[步骤]


SELECT alias.[ID],alias.[CustomerID],alias.[SellerId],alias.[ServerUrl],alias.[FinancesReportID],alias.[OrderSourceID],alias.[MarketplaceName],alias.[AmazonOrderId],alias.[SellerOrderId],alias.[FinancialEventType],alias.[EventItemType],alias.[ShipmentItemType],alias.[EventDetailType],alias.[CurrencyCode],alias.[CurrencyAmount],alias.[SellerSKU],alias.[FnSKU],alias.[ASIN],alias.[OrderItemId],alias.[OrderAdjustmentItemId],alias.[QuantityShipped],alias.[PromotionId],alias.[PromotionType],alias.[PointsGrantedCurrencyCode],alias.[PointsGrantedCurrencyAmount],alias.[PointsReturnedCurrencyCode],alias.[PointsReturnedCurrencyAmount],alias.[PostedDate],alias.[AddTime],alias.[IsBuildFee],alias.[BuildFeeTime],alias.[ManualRefresh],alias.[DataServiceID],alias.[FinancePayoutGUID],alias.[IsRealTime],alias.[Remark]

FROM RB_Amazon_ListFinancialEvents AS alias WITH (NOLOCK)

WHERE ISNULL(alias.IsBuildFee,0)=0

      AND alias.OrderSourceID>0

      AND ((alias.PostedDate >= '2024/3/10 9:32:47'

      AND alias.PostedDate < '2024/4/10 9:32:47') or ManualRefresh=1)

      AND FinancialEventType NOT IN ( 'DebtRecoveryEvents', 'LoanServicingEvents' )

      AND NOT (ISNULL(alias.FinancialEventType,'')='ServiceFeeEvents' AND ISNULL(alias.EventItemType,'')='FeeList' AND ISNULL(alias.EventDetailType,'')='FBAPerUnitFulfillmentFee') 

      AND

      (

          AmazonOrderId IS NULL

          OR AmazonOrderId LIKE 'S%'

  OR (AmazonOrderId!='' AND  OrderItemId IS NULL AND  OrderAdjustmentItemId  IS NULL)

      )

      AND EventDetailType NOT IN ( 'TotalAmount', 'ReserveDebit', 'ReserveCredit', 'FailedDisbursement' )

      AND

      (

          alias.AmazonOrderId NOT IN

          (

              SELECT roi.ClientOrderCode

              FROM RB_OrderInfo roi WITH (NOLOCK)

              WHERE roi.CustomerID = alias.CustomerID

                    AND roi.OrderSourceID = alias.OrderSourceID

                    AND roi.ClientOrderCode = alias.AmazonOrderId

                    AND roi.DownLoadUpdateTime != '2000-01-01 00:00:00.000'

                    AND roi.IsStockOrder = 0

          )

          OR

          (

              AmazonOrderId != ''

              AND OrderItemId IS NULL

              AND OrderAdjustmentItemId IS NULL

          )

      )


该查询语句 主表 RB_Amazon_ListFinancialEvents 使用了 大量的OR 条件,没有一个 唯一 有效的,导致SQL 索引 无法选择,而选择全表扫描



[结果]


[期望]

建议加入有效的条件,让查询语句走索引 减少 磁盘的读取
历史记录  
  1. 2024-04-10 14:14:10, 由 袁慧斌 创建。
  2. 2024-04-10 16:01:18, 由 李乐同 指派给 何智军。
    修改了 指派给,旧值为 "liletong",新值为 "hezhijun"。
  3. 2024-04-10 20:04:51, 由 何智军 指派给 林很。
    修改了 指派给,旧值为 "hezhijun",新值为 "linhen"。
    建议转需求处理
  4. 2024-04-11 11:12:03, 由 林很 转为 需求,编号为 #20086 性能优化-数据库磁盘 本地服务1 亚马逊 财务事件 查询 消耗巨大的 磁盘IO 。
  5. 2024-04-11 11:12:03, 由 林很 关闭。
所属项目 技术中心-需求池
所属模块 亚马逊
所属计划
所属迭代
Bug类型
严重程度 一般
优先级 P1
Bug状态 已关闭
业务部门
影响功能
开发责任人 林很
测试责任人
解决时效 0
激活次数 0
激活日期
是否确认 否
当前指派 Closed 于 2024-04-11 11:12:03
截止日期 0000-00-00
上线时间
上线时效
操作系统
浏览器
关键词
抄送给
所属迭代
相关需求
相关任务
由谁创建 袁慧斌 于 2024-04-10 14:14:09
影响环境 577
由谁解决 林很 于 2024-04-11 11:12:03
解决版本
解决方案 tostory
由谁关闭 林很 于 2024-04-11 11:12:03
最后修改 何智军 于 2024-04-10 20:04:51