2010-11-24 7 views
1

SQL Server 2008 Express가 있으므로 모든 도구가 후드 아래에서 어떤 현상이 발생하는지 확인할 필요가 없습니다.OPTIMIZE 옵션이 다중 명령문 테이블 함수에서 작동합니까?

OPTION (OPTIMIZE FOR (@JobID UNKNOWN, @Status UNKNOWN, @ResellerID UNKNOWN)) 

는 사람이 어느 쪽이든의 증거가 있나요 : 누군가가 다중 문 테이블 함수는 "블랙 박스"이기 때문에 SQL Server가 다음 무시할 수 있다는 것을 나에게 제안?

스토어드 프로 시저를 사용하는 경우 문제가되지 않습니다. 그러나 다중 명령문 테이블 함수를 사용하면 내가해야 할 일에 대해 많은 편의를 제공한다.

+0

솔루션을 MTVF로 구현하는 것과 관련하여 이처럼 편리하게 추가 할 수있는 것은 무엇입니까? 여기서 우리가 대안적이고 더 바람직한 해결책을 제안 할 수있는 추가적인 질문의 범위가있을 수 있습니다. –

+0

추가 된 편의는 결과 페이징 및 매개 변수화 된 필터링을 UDF에 넣고 결과를 ID 테이블로 가져오고이 결과에 대한 JOIN을 사용하여 원래 테이블에서 원하는 열을 가져 오는 기능입니다. 하나의 깨끗한 외부 쿼리. – IamIC

+0

솔루션은 MTVF를 ITVF로 변환하는 방법을 찾는 것입니다. – IamIC

답변

1

익스프레스를 사용하면 다른 버전과 마찬가지로 동일한 정보를 얻을 수 있습니다. 번글에 GUI 도구가 표시되지 않습니다. 예를 들어 sys.dm_exec_query_plan과 같은 DMV에서 실행 계획을 계속 사용할 수 있습니다.

당신이 묻는 질문은 무엇인지 모르겠지만, 인라인 테이블 함수는 다. 다중 명령문 테이블 함수보다 더 나은 선택입니다. 옵티마이 저는 TVF가 무엇을하는지 알 수 있으며, 전체 쿼리 컨텍스트에서 함수를 적절히 최적화 할 수 있습니다. 함수에 대한 불필요한 호출을 제거하거나 전체 쿼리의 전체 집계 시간을 줄이는 데 도움이되는 액세스 경로 (인덱스)를 선택할 수 있습니다. 다중 명령문 TVF를 사용하면 계획은 매번 함수 (예 : 각 후보 행)를 효과적으로 호출하고 평가하고 결과가 무엇인지 확인해야합니다. 이것은 다중 문장 TVF가 '블랙 박스'라고 말할 때 친구가 의미하는 것입니다.

+0

답변 해 주셔서 감사합니다. 그냥 이해할 수 있도록 간단한 "INSERT INTO @ Result (ColX) SELECT ColX FROM TABLE"문을 사용하여 다중 명령문 TVF가 있다고 가정 해 보겠습니다. SQL Server가 각 행에 대해이 코드를 한 번씩 실행한다는 말입니까? 그 부분은 나에게 이해가되지 않는다. – IamIC

+0

http://stackoverflow.com/questions/4254814/sql-server-table-valued-functions-vs-stored-procedures – gbn

+2

@IanC : 다중 문 TVF에서 액세스 할 수없는 특정 방식으로 인라인 TVF를 최적화 할 수 있습니다. . 예 : 병합 조인으로 변환하여 쿼리 트리 위로 이동할 수 있습니다. 또는 TVF 결과의 투영 목록 (필드)을 참조하지 않고 조기에 정리하여 좁은 색인을 선택할 수 있습니다. 다중 명령문을 사용하면 이러한 최적화 경로가 닫힙니다. TVF를 한 번, 여러 번 또는 한 번에 한 번 평가할지 여부는 여러 가지 요인에 따라 다릅니다. –