Sql server sql server 2000/2008查询优化

Sql server sql server 2000/2008查询优化,sql-server,sql-server-2008,query-optimization,Sql Server,Sql Server 2008,Query Optimization,你能帮我优化一下下面的查询吗。这需要很长时间 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_SOU

你能帮我优化一下下面的查询吗。这需要很长时间

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的语法来优化查询。你能帮我解决一下吗


谢谢

您可以尝试以下等效语句,但最有可能的是

  • 您没有足够的索引或
  • 你的桌子真的很大
  • 你的服务器跟不上
删除脚本
您可以尝试以下等效语句,但最有可能的是

  • 您没有足够的索引或
  • 你的桌子真的很大
  • 你的服务器跟不上
删除脚本 眼前的想法:

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

YEAR(RR.X_POLICY_XPRTN_DT)>=2009

RR.X_POLICY_XPRTN_DT>='20090101'和RR.X_POLICY_XPRTN_DT<'20100101'
索引列
x
,而不是
f(x)
,其中f是一个函数

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

YEAR(RR.X_POLICY_XPRTN_DT)>=2009

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


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

您添加了一个2008标记,但标题是2000。是哪一个?你能发布执行计划吗?对不起,我不能分享执行计划。我没有相同的权限。请帮助。您添加了一个2008标签,但标题上写着2000。是哪一个?你能发布执行计划吗?对不起,我不能分享执行计划。我没有相同的权限。请帮忙,谢谢你的及时回复。相比之下,这个查询比我发布的查询要好。我有巨大的表,你能给我建议一些关于这些表的索引,这可以帮助提高查询性能。不管是左连接还是存在:存在通常更好,因为它是半连接-join@user863952-我的第一次尝试是在BVT_SOURCE_KEY、F_TRANS_CD和SOURCE_ID上创建覆盖索引。。。。在BVT_SOURCE_KEY上,X_POLICY_XPRTN_DT和F_BVT_DIV_nothank很多。m query可以很好地进行所有这些更改。再次感谢。感谢您的及时回复。相比之下,这个查询比我发布的查询要好。我有巨大的表,你能给我建议一些关于这些表的索引,这可以帮助提高查询性能。不管是左连接还是存在:存在通常更好,因为它是半连接-join@user863952-我的第一次尝试是在BVT_SOURCE_KEY、F_TRANS_CD和SOURCE_ID上创建覆盖索引。。。。在BVT_SOURCE_KEY上,X_POLICY_XPRTN_DT和F_BVT_DIV_nothank很多。m query可以很好地进行所有这些更改。再次感谢。对不起,我没有理解x和f(x)的意思。我应该索引哪个列。+1以了解其他可能的性能问题和函数注释。@user863952-当您在列(年份(RR.X_POLICY_XPRTN_DT))上使用函数时,SQL Server不能使用索引,但是通过像gbn那样重写语句,sit可以在该列上使用索引。非常感谢。m query可以很好地进行所有这些更改。再次感谢。对不起,我没有理解x和f(x)的意思。我应该索引哪个列。+1以了解其他可能的性能问题和函数注释。@user863952-当您在列(年份(RR.X_POLICY_XPRTN_DT))上使用函数时,SQL Server不能使用索引,但是通过像gbn那样重写语句,sit可以在该列上使用索引。非常感谢。m query可以很好地进行所有这些更改。再次感谢。
 RR.X_POLICY_XPRTN_DT >= '20090101' AND RR.X_POLICY_XPRTN_DT < '20100101'