2011-03-28 3 views
1

인덱스가있는 뷰 만들기

에서 쿼리하는 테이블과 동일한 속성을 나타낼보기를 만들려고했습니다.
CREATE VIEW Agent_View 
AS 
SELECT * FROM Agent_table 

Agent_table에서 동일한 인덱스를 만들 필요가 있는지 알고 싶습니다. Agent_View도 있습니다. .

Agent_View를 schemabound로 선언하여 색인을 작성해야합니까? schemabound로 선언하지 않고 인덱스를 만드는 모든 해결 방법이 있습니까?

+0

보기에 색인을 생성 할 필요가 없다고 생각합니다. 테이블의 인덱스가 사용됩니다. –

답변

3

당신은 SELECT *와 뷰에 인덱스를 만들 수 없습니다 것은 어쨌든 외부 쿼리로 확장 단지 매크로입니다. 테이블 인덱스는 어쨌든 사용됩니다. 뷰는 스키마 관점에서 존재하지 않습니다.

마지막으로 IMHO는 가능한 한보기를 사용하는 것이 가장 무의미합니다. 에 0이으로 추가됩니다.

1

복잡한 쿼리가있는 경우 인덱싱 된 뷰를 만들지 만, 경우에 따라 테이블의 인덱스가 사용됩니다. 당신이 인덱스없이 WITH SCHEMABINDING

전망을 할 수 없기 때문에

MSDN reference

2

이 뷰에 대한 대부분의 쿼리 (전부는 아닐지라도)는 언더 레이 테이블을 직접 사용한 것처럼 동작합니다. 인덱스가 사용되는 여부

select * 
    from agent_table 
where agent_name = 'James Bond'; 

:

select * 
    from agent_view 
where agent_name = 'James Bond'; 

...이에 옵티 마이저에 의해 다시 작성 될 것이다 : 당신이 agent_tableagent_name를 색인하고, 같은 쿼리를 수행 따라서 경우

또는 아닙니다 다른 질문입니다.

관련 문제