DB gurus에 대해서는 SELECT 조인 결과와 이전에 채워진 테이블 변수에 조인간에 기능적/성능 차이가 있는지 궁금합니다. 저는 SQL Server 2008 R2에서 일하고 있습니다.SELECT에 조인 대 테이블 세트에 조인
예 (TSQL) : "진짜"세계에서
-- Create a test table
DROP TABLE [dbo].[TestTable]
CREATE TABLE [dbo].[TestTable](
[id] [int] NOT NULL,
[value] [varchar](max) NULL
) ON [PRIMARY]
-- Populate the test table with a few rows
INSERT INTO [dbo].[TestTable]
SELECT 1123, 'test1'
INSERT INTO [dbo].[TestTable]
SELECT 2234, 'test2'
INSERT INTO [dbo].[TestTable]
SELECT 3345, 'test3'
-- Create a reference table
DROP TABLE [dbo].[TestRefTable]
CREATE TABLE [dbo].[TestRefTable](
[id] [int] NOT NULL,
[refvalue] [varchar](max) NULL
) ON [PRIMARY]
-- Populate the reference table with a few rows
INSERT INTO [dbo].[TestRefTable]
SELECT 1123, 'ref1'
INSERT INTO [dbo].[TestRefTable]
SELECT 2234, 'ref2'
-- Scenario 1: Insert matching results into it's own table variable, then Join
-- Create a table variable
DECLARE @subset TABLE ([id] INT NOT NULL, [refvalue] VARCHAR(MAX))
INSERT INTO @subset
SELECT * FROM [dbo].[TestRefTable]
WHERE [dbo].[TestRefTable].[id] = 1123
SELECT t.*, s.*
FROM [dbo].[TestTable] t
JOIN @subset s
ON t.id = s.id
-- Scenario 2: Join directly to SELECT results
SELECT t.*, s.*
FROM [dbo].TestTable t
JOIN (SELECT * FROM [dbo].[TestRefTable] WHERE id = 1123) s
ON t.id = s.id
는 테이블과 테이블 변수는 사전 정의입니다. 내가 바라는 것은 추가 작업에 사용할 수있는 일치하는 참조 행을 가질 수 있지만 추가 단계로 인해 쿼리 속도가 느려지는 것이 걱정됩니다. 왜 다른 사람보다 더 빠른 이유가 기술적 인 이유가 있습니까? 두 가지 접근 방식간에 어떤 종류의 성능 차이가있을 수 있습니까? 확실한 대답을 내리는 것이 (불가능하지는 않더라도) 어렵다는 것을 알고 있습니다. 단지이 시나리오에 대한 조언을 구하는 것입니다.
프로덕션 환경에서는 SELECT t. *, s. * 과 같은 코드를 사용하고 싶지 않습니다. Seect * i는 SQl antipatattern과 같은 조인이있을 때 jon fileds에 동일한 데이터가 포함되어 있기 때문에 필요없는 필드를 트 레터링합니다. 이것은 매우 가난한 실천입니다. 필요 이상으로 더 많은 데이터를 반환하지 마십시오. – HLGEM
이것은 훌륭한 질문이며 훌륭한 답변입니다. 나는 아마 "나, 너무"논평을위한 물갈퀴를 얻을 것이다, 그러나 +1은 충분하지 않았습니다. –