2013-01-21 2 views
0

기존 시스템을 상속 받았으며 몇 가지 사항을 파악하려고합니다.SQL보기 최적화

시스템은 Table1

SELECT * FROM v_myView WHERE mvViewCol = 'someValue' 

v_myView 수행 합은 SQL Server 2005의 최적화 쿼리 또는 항상 요약됩니다 전체 Table1에 걸쳐 발생합니까 myViewCol

에 따라합니까?

필자는 매개 변수화 된보기를 사용할 수 있지만 불필요한 변경을 원하지 않는다는 것을 알고 있습니다.

건배 제프

+0

쿼리 실행 계획을 작성하고 어떤 일이 일어나는지 확인할 수 있습니다. –

+0

SQL Server에는 매개 변수가있는보기와 같은 것이 없습니다. –

+0

Aaron에게 감사드립니다. 나는 '인라인 테이블 값 함수' –

답변

2

뷰는 전혀 런타임 비용이 없다. 뷰 정의를 텍스트로 붙여 넣은 것처럼 주변 쿼리로 항상 인라인됩니다. 달리 사용하는 것은 비실용적입니다.

SQL Server (2005)는 쿼리를 최적화하거나 합계가 항상 전체 Table1에서 발생합니다.

최적화 될 것입니다.

0

SQL 서버 2005보기는 쿼리에서 참조 될 때마다 최적화합니다 ".보기 확장 후, SQL Server 쿼리 최적화 프로그램이 실행 쿼리에 대한 단일 실행 계획을 컴파일"http://technet.microsoft.com/en-us/library/cc917715.aspx

2005가 설치되어 있지 않지만 2008R2와 유사하게 작동합니다 - 쿼리 최적화 계획을 보려면 쿼리 창을 마우스 오른쪽 단추로 클릭하고 "예상 실행 계획 표시"를 선택하여 자세한 정보를 얻고 병목 현상을 찾아냅니다.

쿼리 메뉴 옵션에는 "데이터베이스 튜닝 관리자의 쿼리 분석"기능이있어 이점이 있습니다.

1

이것은 복잡한 질문입니다. 나는 가장 좋은 설명이 here라고 생각한다. 이 시점에서 Microsoft 설명서가 조금 더 분명해지기를 바랍니다.

보기를 만들면 쿼리가 구문 분석됩니다. 이것은 올바른지 확인합니다.

실행 계획은 처음으로 쿼리를 실행할 때 결정됩니다 (가까운 근사치로). 그런 다음이 실행 계획은 이후 호출을 위해 계획 캐시에 남아 있습니다. 따라서 적절한 열에 인덱스가 있고 첫 번째 실행에 인덱스를 사용할 where 절이 있으면 후속 호출도 인덱스를 사용합니다.

계획이 계획 캐시에 없을 때 이라는 메시지가 실제로 표시되기 때문에 가까운 근사치라고 말합니다.. 데이터베이스를 변경하면 계획을 플러시하고 서버를 다시 시작합니다.

따라서보기에만 where 절을 사용하여보기에 액세스하면보기의 후속 사용이이 용도로 최적화됩니다.