2009-06-01 2 views
3

내 테이블 ("사용자")에 대한보기 ("사용자 활성")를 사용하고 있습니다. 뷰에는 하나의 필터 만 있으며 DateTime Users.DeletedOn이 NULL인지 여부를 확인합니다. 기본적으로 삭제되지 않은 모든 사용자가 포함됩니다.SQL : 테이블에 대한보기 - 여전히 테이블 인덱스를 사용하는보기에 대한 쿼리입니까?

이제 테이블 대신보기에 대해 Linq 쿼리를 실행해도 여전히 테이블 인덱스가 사용됩니까? 아니면 뷰에 대한 특수 인덱스를 만들어야합니까? 나의 이해에서보기 아무것도하지만, 미리 정의 된 쿼리없고 그냥이 직접 쿼리 것처럼 작동합니다 :

SELECT *를 사용자의 DeletedON는 = NULL

내 가정하는 경우 그 기본 테이블의 인덱스 여전히 올바른 것으로 사용됩니까?

+0

Yoyur 가정은 올바른 :)입니다 – Arvo

답변

5

대부분의 경우 SQL Server 쿼리 최적화 프로그램은 기본 테이블의 인덱스를 사용할 수있을 정도로 스마트합니다. 쿼리 계획을 보면이 사실을 알 수 있습니다.

SQL Server 엔터프라이즈 버전이있는 경우 인덱싱 된 뷰를 사용할 수도 있습니다.

-1

색인이 생성되지 않은 경우보기는 정의 된 쿼리를 사용하여 매번 재생성됩니다. 해당 쿼리의 테이블이 인덱싱되면 테이블의 인덱스가 사용됩니다.

뷰를 인덱싱 할 수도 있습니다.이 경우 데이터 세트는 실제 디스크에 커밋되고 두 세트의 인덱스가 있습니다.

+0

? 왜 내가이 downvote 있어요 ??? – jfrobishow

2

뷰는 기본 SQL 문과 완전히 똑같이 투명합니다. 그것은 믿을만한 디자인 가정입니다.

1

인덱싱 된 뷰는 인덱싱되지 않은 뷰와 매우 다릅니다.

뷰는 엔진에 의해 효과적으로 인라인으로 확장 될 수 있으므로 옵티 마이저에 의해 결정되는 테이블 인덱스를 사용할 수 있습니다.

인덱스 된 뷰는 인덱스를 구체화 (최신 유지)합니다. 이보기의 사용자는 사용할 수 있지만 여전히 사용하지 않을 수 있습니다.

예제에 기반한 추가 참고 사항 - 플래그 또는 코드 열에있을 수 있으므로 NULL 기준에서 인덱스가 효과적으로 사용되지 않을 수 있습니다.

0

당신이 당신의 쿼리를 다시 작성해야 가능성이 높습니다 : DeletedON이

DeletedON = NULL이 DeletedON가 null의 경우에도 적용되지 않습니다 NULL IS WHERE

SELECT * 사용자 FROM을

관련 문제