> 데이터 베이스 > MySQL 튜토리얼 > SQL Server의 인라인 및 다중 문 테이블 반환 함수: 무엇을 선택해야 합니까?

SQL Server의 인라인 및 다중 문 테이블 반환 함수: 무엇을 선택해야 합니까?

Mary-Kate Olsen
풀어 주다: 2025-01-12 19:12:42
원래의
677명이 탐색했습니다.

Inline vs. Multi-Statement Table-Valued Functions in SQL Server: Which Should You Choose?

SQL Server 테이블 반환 함수: 인라인 함수와 다중 문 함수 비교

SQL Server의 TVF(테이블 반환 함수)를 사용하면 단일 함수 호출에서 여러 데이터 행을 반환할 수 있습니다. 그러나 TVF는 크게 다중문 함수와 인라인 함수의 두 가지 유형으로 나뉜다.

인라인 테이블 값 함수(ITVF)

ITVF는 함수 정의 내에서 단일 SELECT 문을 사용하여 정의됩니다. 이는 참조된 열의 데이터 유형, Null 허용 여부 및 데이터 정렬을 상속하여 뷰처럼 작동합니다.

다중 명령문 테이블 값 함수(MSTVF)

MSTVF는 일반적으로 테이블 변수를 채우는 INSERT 문을 포함한 여러 문을 사용하여 정의됩니다. 함수 정의에서 열의 데이터 유형과 속성을 명시적으로 선언해야 합니다.

성능 차이

다른 구문에도 불구하고 ITVF와 MSTVF의 성능 차이는 상당합니다. ITVF는 SQL Server의 테이블 통계 기반 쿼리 최적화 프로그램을 최대한 활용하여 효율적인 실행 계획을 생성합니다. MSTVF는 테이블 변수에 가깝고 쿼리 최적화 프로그램의 최적화 효과가 낮으며 실행 계획 효율성이 상대적으로 낮습니다.

적용 가능한 시나리오

ITVF와 MSTVF의 선택은 특정 적용 시나리오에 따라 다릅니다. 함수 논리를 간단한 SELECT 문으로 표현할 수 있는 경우 일반적으로 ITVF가 더 효율적이며 권장됩니다. MSTVF는 추가 처리나 매개변수화가 필요한 경우에 더 적합합니다.

다음 예를 고려해 보세요.

<code class="language-sql">-- 内联表值函数
CREATE FUNCTION GetUnshippedOrders()
RETURNS TABLE
AS 
RETURN SELECT a.SaleId, a.CustomerID, b.Qty
    FROM Sales.Sales a INNER JOIN Sales.SaleDetail b
        ON a.SaleId = b.SaleId
        INNER JOIN Production.Product c ON b.ProductID = c.ProductID
    WHERE a.ShipDate IS NULL
GO

-- 多语句表值函数
CREATE FUNCTION GetLastShipped(@CustomerID INT)
RETURNS @CustomerOrder TABLE
(SaleOrderID    INT         NOT NULL,
CustomerID      INT         NOT NULL,
OrderDate       DATETIME    NOT NULL,
OrderQty        INT         NOT NULL)
AS
BEGIN
    DECLARE @MaxDate DATETIME

    SELECT @MaxDate = MAX(OrderDate)
    FROM Sales.SalesOrderHeader
    WHERE CustomerID = @CustomerID

    INSERT @CustomerOrder
    SELECT a.SalesOrderID, a.CustomerID, a.OrderDate, b.OrderQty
    FROM Sales.SalesOrderHeader a INNER JOIN Sales.SalesOrderHeader b
        ON a.SalesOrderID = b.SalesOrderID
        INNER JOIN Production.Product c ON b.ProductID = c.ProductID
    WHERE a.OrderDate = @MaxDate
        AND a.CustomerID = @CustomerID
    RETURN
END
GO</code>
로그인 후 복사

이 예에서 MSTVF는 특정 고객의 마지막 배송 주문을 계산하는 데 사용되며, 이를 위해서는 추가 처리가 필요합니다. ITVF는 배송되지 않은 모든 주문 목록만 검색하면 되며 이는 간단한 필터링 작업에 더 적합합니다.

위 내용은 SQL Server의 인라인 및 다중 문 테이블 반환 함수: 무엇을 선택해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿