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'