2010-12-22 7 views
0

SQL Server 2000 through 2008R2 (모두 Standard Edition)를 지원합니다.보기에 대한 질문

질문 1

다음과 같은 가상의 상황을 고려하시기 바랍니다. 테이블이 내부에 조인 된 5 개의 테이블 뷰가 있다고 가정 해 봅시다. 또한 각 테이블에서 10 개의 필드를 가져 오는 것으로 가정하므로 총 50 개의 필드가있는보기가 있습니다. 보기에서 두 필드 (두 테이블 각각 하나씩) 만 선택한 경우 동일한 테이블과 조인을 모두 가지고 있다고 가정하면 동등한 테이블 조인 스크립트보다 쿼리가 느려 집니까?

질문 2 나는이 같은 스크립트 일반적인보기 만들어진 어떤 경우

:

Create View SomeView 
AS 

select * from SomeTable 
Go 

이 테이블 필드는 상당히 정기적으로 추가해야합니다. "SomeTable"에 필드를 추가 할 때마다보기가 자동으로 올바르게 작동합니다. 이것은 상당히 느립니다 SomeTable에 50 개의 필드가 있고 일반 뷰에서 두 필드를 선택한 경우? Select * 뷰에서 두 개의 필드를 선택하면 해당 필드에 대해서만 쿼리가 수행됩니까?

Select (some fields) from dbo.Blah where SomeDate >= '1/1/2008' 

내가 어떤 성능을 잃게됩니다

질문 3 나는 다음과 같은

Create View Blah 
AS 
select (some fields) 
from TableA join TableB on TableA.Blah = TableB.Blah 
Go 

같은 뷰를 작성하는 경우 그 다음이 같은 뷰를 사용할 수 있습니까? 옵티마이 저는 실제로 적용된 뷰 레코드 만 가져 오거나 모두 풀링 한 다음 결과 세트를 하위 선택합니까?

TIA.

+1

안 보이면보고 실행 적으로'select *'를 가진 뷰를 생성한다 - 근본적인 테이블이 바뀌면 기대했던 것보다 다른 데이터 값/타입을 얻을 수 있기 때문에 정말 나쁜 생각이다 – RedFilter

답변

2

나는 "SomeTable"뷰가 자동으로 작동 할 수있는 필드를 추가 할 때마다, 맞습니까?

없음 , 최적화 실제로에만 적용보기 기록을 끌어 또는 모두를 끌어 다음 하위 결과 집합을 선택 여기 how to make sure that the view will have the underlying table changes by using sp_refreshview

참조?

뷰가 저장된 조회에 불과하다, 옵티마이 범위을 추구하거나 필요한 데이터 만에 스캔 똑똑, 당신은 실행 계획

을 보면이를 확인할 수 있습니다

그래서 총 50 개의 필드가있는보기가 있습니다. 보기에서 두 필드 (두 테이블 각각 하나씩) 만 선택한 경우 동일한 테이블과 조인을 모두 가지고 있다고 가정하면 동등한 테이블 조인 스크립트보다 쿼리가 느려 집니까?

다시 통계 이오 나 시간에 쿼리 *에 단 2 열 및 당신이에서 읽기의 차이와 시간, 예를 들어 너무

SET STATISTICS IO ON 
GO 

SELECT * FROM SomeView 

SET STATISTICS IO OFF 
GO 



SET STATISTICS IO ON 
GO 

SELECT Col1, Col2 FROM SomeView 

SET STATISTICS IO OFF 
GO 
+1

'sp_refreshview'를 사용하는 것을 의지하지 않고, 뷰에서'select *'를 사용하지 마십시오 - 결과는 b 전자 재앙! – RedFilter

+0

맞습니다. 블로그 게시글의 마지막 줄이기도합니다. – SQLMenace