首页 > 解决方案 > 不同的查询相同的执行计划

问题描述

我正在将 SQL Server 2000 中运行的一些查询的语法更新到 SQL Server 2016。有问题的查询使用非常古老的语法 ( *= )。运行旧代码和新代码后,我得到相同的结果,相同的执行计划,但我想知道我所做的“翻译”是否正确。

有人可以解释为什么不同的查询具有相同的执行计划吗?我看到了相反的情况,但这对我来说是新的。

我写的查询是否等同于旧查询?请不要关注表名,而要关注表的正确连接。

这是我所拥有的:

Select 
    Count(*) As Cnt 
From 
    FNFItemFat, FUnidade, FNCM, FSitTributaria, 
    FTipoIPI FK_FNFITEMFAT_FTIPOIPI1, FNotaFiscalFat NOTA1 
Where 
    NOTA1.CodNFInsumos = fNFItemFat.CodNFInsumos 
    and FNFItemFat.CodNCM *= FNCM.CodNCM 
    and FNFItemFat.CodSitTrib = FSitTributaria.CodSitTrib 
    and FNFItemFat.CodUnidade = FUnidade.CodUnidade 
    and FNFItemFat.CodTipoIPI = FK_FNFITEMFAT_FTIPOIPI1.CodTipoIPI

这是我所做的:

Select 
    Count(*) As Cnt 
From 
    FNFItemFat fNFItemFat
Inner Join 
    FNotaFiscalFat NOTA1 on NOTA1.CodNFInsumos = fNFItemFat.CodNFInsumos
Left Join 
    FNCM fNCM on fNCM.CodNCM = fNFItemFat.CodNCM
Inner Join 
    FSitTributaria fSitTributaria on fSitTributaria.CodSitTrib = fNFItemFat.CodSitTrib
Inner Join 
    FUnidade fUnidade on fUnidade.CodUnidade = fNFItemFat.CodUnidade
Inner Join 
    FTipoIPI FK_FNFITEMFAT_FTIPOIPI1 on FK_FNFITEMFAT_FTIPOIPI1.CodTipoIPI = fNFItemFat.CodTipoIPI

标签: sql-serversql-server-2008sql-server-2000sql-server-2016sql-execution-plan

解决方案


推荐阅读