문제

우리는 SQL 2000에서 SQL 2008로의 전환을 검토하기 시작했으며 테이블 값 매개변수화된 UDF 또는 상관 하위 쿼리에 대해 '조인' 형식을 허용하는 새로운 CROSS APPLY 및 INNER APPLY 구문에 주목하고 있습니다.

분명히 논리를 UDF로 캡슐화하고 이를 다른 쿼리에서 재사용할 수 있다면 좋겠지만 그 기능에는 비용이 따른다고 확신합니다.

나는 인터넷을 꽤 많이 둘러봤지만 동일한 쿼리를 인라인할 경우 얻을 수 있는 성능에 비해 APPLY 기반 쿼리를 사용할 때 얻을 수 있는 성능 저하의 정도를 나타내는 성능 메트릭을 찾을 수 없습니다.

정확한 영향은 특정 ​​스키마와 쿼리에 크게 좌우된다는 것을 알고 있지만, 실제 시스템을 조정하여 이에 대해 공유한 경험이 있는 사람이 있는지 궁금합니다.

도움이 되었습니까?

해결책

나는 여러 곳에서 APPLY를 사용합니다.필요한 경우 루프 대신 행 단위로 처리하는 것이 유용합니다.

이상하게도 최적화 프로그램이 UDF를 블랙 박스로 처리하고 내가 원하는 대로 필터를 적용했기 때문에 한 곳에서는 (프로파일러를 사용하여 읽기를 볼 때) 더 효율적이었습니다.

udf는 JOIN에서 확장/중첩 해제될 때 최적화자가 쿼리를 전체적으로 보고 다른 위치에 필터를 적용했기 때문에 더 나빴던 인라인 테이블 값 함수입니다.

그렇지 않으면 드물게 사용하거나 자주 실행되지 않는 코드에 사용합니다...그리고 그것이 정말로 나쁘게 죽이지 않는지 확인하십시오.유지 관리성을 얻기 위해 히트를 받아들입니다.

주제를 벗어:캡슐화는 지금까지 데이터베이스에서만 진행됩니다.어느 시점에서 세트 기반 이점을 잃게 됩니다.

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