문제

방금 SQLServer 2000의 테이블 값 함수로 복잡한 SQL 문을 래빙했습니다. dbo.newfunc에서 select *에서 쿼리 계획을 살펴보면 내가 만든 테이블의 테이블 스캔을 제공합니다.

테이블이 tempdb에서 만들어졌고 그냥 선택하고 있기 때문입니다.

그래서 쿼리는 간단합니다.

SELECT * FROM table in tempdb

내 질문은 다음과 같습니다.

UDF가 복잡한 SQL 문과 동일한 계획을 사용하고 있습니까?

이 UDF의 인덱스를 어떻게 조정하려면?

진정한 계획을 볼 수 있습니까?

도움이 되었습니까?

해결책

다중 상태 테이블 값 함수 (TVF)는 외부 쿼리의 최적화기에 대한 블랙 박스입니다. 프로파일 러에서 IO, CPU 등만 볼 수 있습니다.

TVF는 처리가 발생하기 전에 완료하고 모든 행을 반환해야합니다. 예를 들어 절은 예를 들어 위치를 최적화하지 않는 것을 의미합니다.

따라서이 TVF가 백만 행을 반환하면 먼저 정렬되었습니다.

SELECT TOP 1 x FROM db.MyTVF ORDER BY x DESC

단일 명세서/인라인 TVF는 매크로처럼 확장되어 평가 되었기 때문에 어려움을 겪지 않습니다. 위의 예는 인덱스 등을 평가합니다.

또한 여기에도 : Query Plan Optimizer가 결합/필터링 된 테이블 값 기능과 잘 작동합니까? 그리고 Microsoft SQL Server 2008에 가입 대 적용의 상대 효율성

정확히 대답하려면 : 아니요, 아니요.

나는 다중 명령문 TVF가 거의 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top