0

ID 목록을 반환하는 복잡한 쿼리를 작성했습니다. 이제이 쿼리를 다시 사용하여 다른 쿼리와 결과를 조인하고 싶습니다. 이를 위해 이것을 Stored Proc 또는 UDF에 넣은 다음 임시 테이블에 삽입 할 계획입니다.SQL Server StoredProc 대 UDF 인라인 테이블

1)은 UDF에 쿼리를 넣고 임시 테이블에 삽입 저장 프로 시저에서 쿼리를 넣고 임시 테이블

INSERT INTO #TEMP 
EXEC SP_COMPLEX(@PARAM1,@[email protected]@PARAMN) 

2)에 삽입 아래와 같이

뭔가

INSERT INTO #TEMP 
SELECT ID_LIST FROM DBO.UDF_COMPLEX(@PARAM1,@[email protected]@PARAMN) 

1000 개의 ID 결과에 대해이 두 가지를 실행할 때 유의미한 차이를 볼 수 없습니다. 그러나 실제 구현에서 결과는 백만 행이 될 수 있습니다.

성능면에서 어느 것이 더 좋을까요?

답변

2

추측하기보다는 두 기술의 실행 계획을 비교하는 것이 좋습니다.

사용자 정의 함수는 또한 때때로 원인 성능이 저하 할 수 있고, 편리 수 있습니다. 이 문제는 집합 기반 작업 대신 커서와 비슷한 행 단위 처리를 사용한다는 것입니다. 따라서 결과 집합이 인 경우 성능이 에 미치지 못합니다. 그러나 결과 집합이 큰 경우 성능이 이면 문제가 될 수 있습니다. 일반적으로 사용자 정의 함수 을 사용하는 경우 을 사용하여 큰 결과 인 세트를 사용하지 않아야합니다. 대신 저장 프로 시저를 사용하십시오.

스칼라 값 사용자 정의 함수의 성능을 향상시키는 한 가지 방법은이를 테이블 반환 값으로 변환하는 것입니다.

0

인라인 테이블 값 함수를 사용하여 직접 찾았습니다. 내가 직접 질문에 입력 한 옵션보다 효율적이고 효율적인 옵션입니다. 아래의 구문은 실제로 INSERT INTO #TEMP 매우 비효율적이다

SELECT MYTABLE.MYFIELD FROM MYTABLE, DBO.UDF_COMPLEX(@PARAM1,@[email protected]@PARAMN) MYQUERY 
WHERE MYTABLE.KEYVALUE = MYQUERY.KEYVALUE 
+0

처럼 뭔가 EXEC SP_COMPLEX (@ PARAM1, @ PARAM2 ... @@를 Paramn) – devanalyst