임시 테이블에 기존 테이블을 복사하면 동적 SQL에 비해 성능이 떨어지는 지 궁금합니다. 나는 현재 후자의 스타일로 프로 시저 빌드를 사용하고 있기 때문에 나는이 부탁 해요성능 동적 SQL 대 임시 테이블
CREATE PROCEDURE UsingDynamicSQL
(
@ID INT ,
@Tablename VARCHAR(100)
)
AS
BEGIN
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL = 'Insert into Table2 Select Sum(ValColumn) From '
+ @Tablename + ' Where ID=' + @ID
EXEC(@SQL)
END
CREATE PROCEDURE UsingTempTable
(
@ID INT ,
@Tablename Varachar(100)
)
AS
BEGIN
Create Table #TempTable (ValColumn float, ID int)
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL = 'Select ValColumn, ID From ' + @Tablename
+ ' Where ID=' + @ID
INSERT INTO #TempTable
EXEC (@SQL);
INSERT INTO Table2
SELECT SUM(ValColumn)
FROM #TempTable;
DROP TABLE #TempTable;
END
:
내가 다음과 같은 두 가지 SQL Server 저장 프로 시저 사이에 다른 성능을 기대해야하는지 궁금 구체적으로 여기서 나는 기존 테이블의 간단한 추출물로 많은 임시 테이블을 만들고이 임시 테이블로 작업하고 있습니다. 임시 테이블을 제거하고 대신 동적 SQL을 사용하여 저장 프로 시저의 성능을 향상시킬 수 있습니까? 필자의 의견으로는 Dynamic SQL 버전이 프로그램에서 훨씬 더 추악하기 때문에 - 우선 임시 테이블을 사용했습니다.
해당 sp를 모두 테스트 할 수 없습니까? – Lamak
프로그래밍 방식을 결정하기 위해 미학을 사용하기 전에 테이블 변수에 대해 Microsoft가 말한 것을 읽었습니까? 흥미로운 행 수에 관한 부분을 발견했습니다. –
이것에 대한 대답은 테이블 변수의 크기를 포함한 많은 것들에 달려 있습니다. 레코드가 많으면 인덱싱 할 수있는 유혹 물을 사용하는 것이 좋습니다. 나는 왜 당신이 테이블 이름을 전달하기를 원하는지에 대해 더 염려한다. 그것은 디자인 문제를 말해줍니다. 그리고 BTW는 수학 계산을 수행하는 경우 float를 사용하지 않습니다. 정확한 값은 아니며 반올림 오류를 도입합니다. – HLGEM