테이블 값 함수(TVF)와보다
테이블 값 함수와 뷰의 차이점은 무엇입니까?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
멀티스테이트먼트 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를 직접 파라미터화하는 기능을 통해 뷰에 대한 동등한 파라미터화된 쿼리보다 더 나은 실행 계획이 수립될 수 있습니다.
저는 일반적으로 자신의 변환 여부를 결정할 때 경험적인 규칙을 가지고 있습니다.SELECT
에 대해서VIEW
또는TVF
.
보기를 완료하는 데 2초 이상 걸리고 10,000개 이상의 기록이 있습니까?[YES]의 경우 TVF로 변환합니다.그렇지 않으면 그냥 두세요.
물론 그 규칙은 순전히 성과에 기초한다.
TVF를 사용하면,CROSS APPLY
예를 들어 프라이머리 키와 같은 특정 값을 전달한다.
WHERE ID = xxx
여기서 'xxx'는 SELECT에서 전달되는 값입니다.
성능이 훨씬 더 빠릅니다!
TVF를 볼 수 있다면 SELECT에 있는 행의 1% 미만을 반환하기 위해 200만 행 이상을 반환할 수 있도록 해야 합니다.
생각해 볼 게 있어요.
함수의 반환 테이블에 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
'programing' 카테고리의 다른 글
MVVM을 사용하여 WPF에서 선택한 확인란을 기반으로 텍스트 상자 사용/사용 안 함 (0) | 2023.04.20 |
---|---|
개인 git repo를 도커 파일로 복제 (0) | 2023.04.20 |
SQL에서 문 삭제가 매우 느립니다. (0) | 2023.04.20 |
단일 개별 열을 기준으로 고유한 행 선택 (0) | 2023.04.20 |
Git 및 고약한 "오류: 기존 정보/참조를 잠글 수 없습니다" (0) | 2023.04.20 |