2010-02-09 3 views
2

사용자 정의 함수와 관련하여 의문의 여지가 있습니다. 왜/언제 기능을 사용해야하는지 알고 싶습니다.저장 프로 시저를 통한 사용자 정의 함수의 장점

저장 프로 시저보다 함수의 장점은 무엇입니까? 제안

구글을 통해 검토 한 결과 내가 본 기사 :

  • 저장 프로 시저 함수보다 더 유리하다.
  • 기능은
  • 기능
  • 기능은 저장 프로 시저를 호출 할 수 없습니다 임시 테이블을 사용할 수 없습니다 오류 처리가 제한됩니다.

함수의 유일한 장점은 함수를 인라인 쿼리로 사용할 수 있다는 것입니다.

임시 테이블을 사용하여 저장 프로 시저와 동일한 결과를 얻을 수 있지만 저장 프로 시저와 비교하여 함수를 사용하는 시나리오를 알아야합니다. UDF에서 제공하는 대부분의 기능을 저장 프로 시저에서 수행 할 수있는 이유는 무엇입니까? 아무도 나를 인도 할 수 있습니까?

답변

1

가장 큰 차이점은 저장 프로 시저 과 달리 함수를 인라인으로 호출 할 수 있다는 것입니다. 위의 입증 된 바와 같이

SELECT dbo.fxnFormatName(FirstName, LastName) AS FormattedName 
FROM MyTable 

SELECT * 
FROM dbo.fxnTableReturningFunction() x 

사용자 정의 함수는 쿼리에서 테이블 형식의 데이터를하고 함수를 호출 해 수를 반환 할 수 있습니다. sproc을 사용하면 결과를 임시 테이블에 저장하고 결과 테이블을 조작/쿼리하기 위해 결과를 저장해야합니다.

플립 측면에서 네, 기능에서 수행 할 수있는 작업이 제한되어 있습니다. 예 : 당신은 동적 SQL을 사용할 수 없으며 pre-SQL 2005에서는 함수 내에서 GETDATE()와 같은 비 결정적 함수를 사용할 수 없습니다.

함수를 사용하려는 경우의 예는 위의 첫 번째 예에서와 같이 공통적 인 "서식 지정"기능을 마무리하는 것입니다. 모든 쿼리에서 이름과 성을 하나로 묶는 로직을 반복하지 않고, 당신은 그것을 함수로 싸고 어디에서나 호출 할 수 있습니다. 일반적으로 UI에 서식을 남겨 두는 것이 좋지만 간단하게 사용할 수있는 위치의 예입니다.

또한 sproc의 결과를 저장하기 위해 임시 테이블을 만들지 않아도 더 좋을 수 있습니다. sproc이 변경되어 더 많은 열을 반환하는 경우 결과를 임시 테이블로로드하는 모든 곳을 변경하여 반환 된 새 스키마로 결과를 보관하는 데 사용하는 테이블 테이블의 스키마를 동기화해야합니다. 유지 보수 할 임시 테이블이 없으므로 함수 접근 방식에이 문제가 없습니다.

+0

맞지 않습니다. 함수에서 GETDATE()와 같은 것을 사용할 수 있는지 여부는 SQL Server 버전에 따라 다릅니다. –

+0

@ 프랭크 - 잡은 고마워. 나는 갱신했다. – AdaTheDev

2

세 가지 유형의 기능이 있습니다 : 스칼라, 인라인 테이블 및 표 값. 일반적으로 Scalar & 테이블 값 함수는 성능 문제를 일으킬 수 있습니다. 쿼리 최적화 프로그램은 이러한 유형의 함수 사용 최적화를 제대로 수행하지 못하기 때문에 성능 문제가 발생할 수 있습니다. 그러나 인라인 테이블 기능의 성능은 훌륭합니다.

여기 라 함수의 새로운 유형 만들 수있는 연결 요청이 :이 기능 식을 인라인 쿼리 최적화를 허용하여 성능을 크게 향상 때문에 나는 사람들이 하나에게 투표 할 수 있기를 바랍니다 The Scalar Expression function would speed performance...

는, 일반 쿼리와 마찬가지로 통계 등을 활용하십시오.

2

사용자 정의 함수의 주요 단점은 각 행에 대해 호출된다는 것입니다. 따라서 SELECT 목록에 이와 같은 함수가 있고 더 큰 세트에서 작업하는 경우 성능이 떨어질 가능성이 큽니다. MySQL의의

+1

...하지만 SELECT 절에 저장 프로 시저를 포함 할 수 있습니까? 그렇다면이 두 가지를 비교할 때 어떤 단점이 있습니까? – whytheq

0

장점 절차

  1. 여러 응용 프로그램은 여러 환경에서 실행하고 동일한 데이터베이스를 사용할 필요가있다을 저장. 저장 프로 시저를 사용하면 비즈니스 로직을 프로그래밍 언어와 독립적으로 만들 수 있습니다.

  2. 보안이 주요 관심사 인 경우 저장 프로 시저를 사용해야합니다. 데이터베이스를 통해 작업을 수행하면 수행 된 모든 작업을 기록 할 수 있습니다. 뱅킹 사이트가 가장 좋은 예입니다.

  3. 저장 프로 시저를 사용하는 경우 데이터 액세스와 트랜잭션을 보호하는 또 다른 방법 인 테이블 액세스가 직접적으로 필요하지 않습니다.

  4. 저장 프로 시저가 응용 프로그램의 성능을 향상 언젠가

  5. 응용 프로그램이 크거나 다음 저장 프로 시저를 사용하여 원격 시스템에 데이터베이스 서버는 데이터베이스 서버와 애플리케이션 서버 사이의 트래픽을 감소 할 수 있습니다.

  6. 저장 프로시 저는 데이터베이스 서버에 작성되고 응용 프로그램은 sepratly를 호출 한 다음 재사용 가능성을 나타냅니다.

관련 문제