program tip

TVF (Table-Valued Function) vs.보기

radiobox 2020. 10. 27. 08:02
반응형

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

반응형