반응형
TVF (Table-Valued Function) vs.보기
테이블 반환 함수와 뷰의 차이점은 무엇입니까? 1로 할 수있는 일 중 다른 사람으로는하기 어렵거나 불가능한 것이 있습니까? 아니면 효율성에 차이가 있습니까?
매개 변수가없는 인라인 TVF와 구체화되지 않은 뷰는 매우 유사합니다. 떠오르는 몇 가지 기능적 차이점은 다음과 같습니다.
견해
Accepts Parameters - No
Expanded out by Optimiser - Yes
Can be Materialized in advance - Yes (through indexed views)
Is Updatable - Yes
Can contain Multiple Statements - No
Can have triggers - Yes
Can use side-effecting operator - Yes
인라인 TVF
Accepts Parameters - Yes
Expanded out by Optimiser - Yes
Can be Materialized in advance - No
Is Updatable - Yes
Can contain Multiple Statements - No
Can have triggers - No
Can use side-effecting operator - No
MultiStatement TVF
Accepts Parameters - Yes
Expanded out by Optimiser - No
Can be Materialized in advance - No
Is Updatable - No
Can contain Multiple Statements - Yes
Can have triggers - No
Can use side-effecting operator - No
런타임시 뷰 및 인라인 TVF는 모두 인라인되며 파생 테이블 또는 CTE와 유사하게 처리됩니다. 전체적으로 (또는 어떤 경우에는 전혀) 평가되지 않거나 다른 경우 여러 번 평가 될 수 있습니다 . 다중 문 TVF는 항상 반환 테이블 유형 (기본적으로 테이블 변수)에 평가되고 저장됩니다.
때때로 인라인 TVF를 직접 매개 변수화하는 기능은 뷰에 대해 동등한 매개 변수화 된 쿼리보다 더 나은 실행 계획으로 이어질 수 있습니다.
함수의 반환 테이블에 PK가 지정되어있을 때 MultiStatement TVF와의 조인이 Views보다 훨씬 더 나은 성능을 발휘한다는 사실을 발견했습니다.
CREATE FUNCTION [FORMREQS].[fnGetFormsStatus] ()
RETURNS
/* Create a PK using two of the columns */
@Indexed TABLE (
[OrgID] [char](8) NOT NULL,
[PkgID] [int] NOT NULL,
[FormID] varchar(5) NOT NULL,
PRIMARY KEY CLUSTERED(OrgID, PkgID)
)
AS
BEGIN
INSERT @Indexed SELECT OrgID, PkgID, FormID FROM FormsTable
RETURN
END
참고 URL : https://stackoverflow.com/questions/4960137/table-valued-functiontvf-vs-view
반응형
'program tip' 카테고리의 다른 글
동형 함수의 중요성 (0) | 2020.10.27 |
---|---|
C에서 C ++ 함수를 호출하는 방법은 무엇입니까? (0) | 2020.10.27 |
앱이 Payload /에서 비공개 선택기를 참조합니다. (0) | 2020.10.27 |
Kotlin : KClass의 getClass ()와 동일 (0) | 2020.10.27 |
Tomcat / Java WebApps에서 HttpOnly 쿠키를 어떻게 구성합니까? (0) | 2020.10.27 |