【问题标题】:sql server 2000/2008 query optimizationsql server 2000/2008 查询优化
【发布时间】:2011-09-09 08:47:09
【问题描述】:

您能帮我优化以下查询吗?它需要很长时间。

delete from dbo.tgrid_detl  
    where F_TRANS_CD = 'R'
    and SOURCE_ID = 'BVT'
    and not exists
        (select rr.BVT_SOURCE_KEY
             from nurdevusrt.VBVT_RNEWL_RTENTN_DETL RR
         where dbo.tgrid_detl.BVT_SOURCE_KEY = rr.BVT_SOURCE_KEY
         and  YEAR(RR.X_POLICY_XPRTN_DT)>=2009 
         and rr.F_BVT_DIV_NO not in (37,65,88))

编辑

我使用的是 sql server 2008,但我可以使用 sql server 2000 或 sql server 2008 的语法来优化查询。你能帮忙解决一下吗?

谢谢

【问题讨论】:

  • 您添加了一个 2008 标记,但您的标题显示 2000。它是哪个?
  • 你能发布一个执行计划吗?
  • 抱歉我不能分享执行计划。我没有相同的权限。请帮忙。

标签: sql-server sql-server-2008 query-optimization


【解决方案1】:

立即思考:

  • 索引很差或不存在
  • 你有触发器
  • VBVT_RNEWL_RTENTN_DETL 是一些可怕的观点

还有,改变

YEAR(RR.X_POLICY_XPRTN_DT)>=2009

 RR.X_POLICY_XPRTN_DT >= '20090101' AND RR.X_POLICY_XPRTN_DT < '20100101'

您索引列 x,而不是 f(x),其中 f 是一个函数

【讨论】:

  • 对不起,我没有理解 x 和 f(x) 的含义。我应该索引哪个列。
  • +1 表示可能存在的其他性能问题和函数注释。
  • @user863952 - 当您在列 (YEAR(RR.X_POLICY_XPRTN_DT)) 上使用函数时,SQL Server 不能使用索引,而是像 gbn 那样重写语句,坐可以在该列上使用索引。
  • 非常感谢。 m 查询在进行所有这些更改时工作正常。再次感谢。
【解决方案2】:

您可以尝试遵循等效的语句,但很可能两者都可以

  • 您没有足够的索引或
  • 你的桌子真的很大或者
  • 您的服务器跟不上

删除脚本

BEGIN TRAN

DELETE FROM dbo.tgrid_detl
FROM    dbo.tgrid_detl
        LEFT OUTER JOIN nurdevusrt.VBVT_RNEWL_RTENTN_DETL RR
          ON dbo.tgrid_detl.BVT_SOURCE_KEY = rr.BVT_SOURCE_KEY 
             and YEAR(RR.X_POLICY_XPRTN_DT) >= 2009 
             and rr.F_BVT_DIV_NO not in (37,65,88)
WHERE   rr.BVT_SOURCE_KEY IS NULL
        and F_TRANS_CD = 'R' 
        and SOURCE_ID = 'BVT' 

ROLLBACK TRAN

【讨论】:

  • 感谢您的即时回复。这个查询比我发布的查询要好。我有很大的表,请您建议我对这些表进行一些索引,以帮助提高查询性能。
  • LEFT JOIN 还是 EXISTS 无所谓:EXISTS 通常更好,因为它是半连接
  • @user863952 - 我的第一次尝试是在 BVT_SOURCE_KEY、F_TRANS_CD 和 SOURCE_ID 上创建一个覆盖索引。
  • ... 以及 BVT_SOURCE_KEY、X_POLICY_XPRTN_DT 和 F_BVT_DIV_NO
  • 非常感谢。 m 查询在进行所有这些更改时工作正常。再次感谢。
猜你喜欢
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多