慕哥6287543
在SQL Server中,总是有查询计划要检查,可以按以下方式进行文本输出:SET SHOWPLAN_ALL ONGODECLARE @TABLE_A TABLE( ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, Data VARCHAR(10) NOT NULL)INSERT INTO @TABLE_ASELECT 'ABC' UNION SELECT 'DEF' UNIONSELECT 'GHI' UNIONSELECT 'JKL' DECLARE @TABLE_B TABLE( ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY, Data VARCHAR(10) NOT NULL)INSERT INTO @TABLE_BSELECT 'ABC' UNION SELECT 'DEF' UNIONSELECT 'GHI' UNIONSELECT 'JKL' SELECT A.Data, B.DataFROM @TABLE_A AS A, @TABLE_B AS BWHERE A.ID = B.IDSELECT A.Data, B.DataFROM @TABLE_A AS A INNER JOIN @TABLE_B AS B ON A.ID = B.ID现在,我将省略为表变量创建的计划,尽管这两个查询的计划是相同的: SELECT A.Data, B.Data FROM @TABLE_A AS A, @TABLE_B AS B WHERE A.ID = B.ID |--Nested Loops(Inner Join, OUTER REFERENCES:([A].[ID])) |--Clustered Index Scan(OBJECT:(@TABLE_A AS [A])) |--Clustered Index Seek(OBJECT:(@TABLE_B AS [B]), SEEK:([B].[ID]=@TABLE_A.[ID] as [A].[ID]) ORDERED FORWARD) SELECT A.Data, B.Data FROM @TABLE_A AS A INNER JOIN @TABLE_B AS B ON A.ID = B.ID |--Nested Loops(Inner Join, OUTER REFERENCES:([A].[ID])) |--Clustered Index Scan(OBJECT:(@TABLE_A AS [A])) |--Clustered Index Seek(OBJECT:(@TABLE_B AS [B]), SEEK:([B].[ID]=@TABLE_A.[ID] as [A].[ID]) ORDERED FORWARD)因此,简短的答案-无需重写,除非您每次维护时都花很长时间尝试阅读它们?