2009-10-05 2 views
2

테이블에서 약 200 열을 끌어 오는 뷰가 있습니다. 조인하지 않습니다. 뷰를 사용하는 procs는 약 10 개의 열만 사용합니다. 추가 190 열을 사용하면 뷰를 사용하여 성능에 상당한 영향을 미칩니 까?보기의 열 수가 성능에 영향을 줍니까?

편집 : 원래 질문자의 의견을 기반으로 명확히하기 위해 자신의 proc의 쿼리는 200 개 중 10 개의 열만 사용합니다. 기본보기에 200 개의 열이 포함되어 있기 때문에 여전히 성능 저하가 발생합니까? 아니면 최적화 프로그램 10 개의 열만 사용한다는 것을 알고 190 개의 다른 뷰에 대한 뷰의 지식을 무시합니까?

감사합니다,

크리스

+0

당신이 말하는 * procs *가 저장 프로 시저이거나 클라이언트 측 프로그램인지 확실하지 않습니다. –

+0

그들은 asp.net 응용 프로그램에서 호출하는 서버에 저장 프로 시저입니다. – GernBlandston

+0

보기를 사용하거나 사용하지 않고 프로필을 작성해야하지만 그다지 걱정하지 않아도됩니다. 기본적으로 SQL Server는 저장 프로 시저에서 뷰를 호출 할 때 뷰를 확장합니다. 나는 옵티마이 저가 실제로 어떤 컬럼이 필요한지 파악할만큼 똑똑하다고 확신한다. –

답변

1

우선, WHERE 절을 사용하여보기가 제한되면, 좋은 색인을 사용할 수 없기 때문에 성능상의 불이익을 당할 가능성이 있습니다 보기의 자체 색인과 충돌하는 경우 열 10 개에 뷰는 단지 열을 제한하지만 WHERE 절을이없는 경우

, 그것은 불확실하다 - 자세한 내용은 아래를 참조하십시오, 나는보기가 반드시되지 않기 때문에 당신이 벌을 겪게됩니다 것을 추론하고있어 this article을 바탕으로

을 열 10 개를 사용하여 컴파일하고 잘못된 쿼리 계획을 상속받을 수 있습니다.

그것은 테스트에 매우 쉽습니다 :

  1. 쿼리

    select * from myView where someNonIndexedColumn = someValue

    를 실행 (where 절에서 열이 원래의 테이블에 인덱스의에 NOT 있는지 확인).

  2. 위에서 쿼리 계획을 실행하고 테이블 스캔을 수행하는지 확인하십시오.

  3. 이제 원본 테이블의 색인에있는 두 개의 열을 선택하십시오. 예 : 그것들에 대한 쿼리가 커버 인덱스를 사용해야하는지 확인하십시오. 인덱스 I1에 C1과 C2라고 말하십시오.

  4. 실행

    select C1, C2 from myTable where C1=x and C2=Y

    에서 쿼리 계획에

    하고 커버링 인덱스로 "I1"인덱스를 사용해야합니다.

  5. 에 쿼리 계획과 실행

    select C1, C2 from myView where C1=x and C2=Y

    하고 커버링 인덱스로 테이블 스캔 또는 I1을 할 것입니다 있는지 확인합니다.

내 의심 당신이 "extr 190 열 성능에 대한 나쁜 것입니다"입니다 대답이 경우 테이블 스캔을 할 것입니다 - 기본적으로, 라이언 Fonnett의 링크 된 문서의 네거티브 모든보기에 적용 .

# 5에서 커버 인덱스를 사용하는 경우 190 열이 있다는 사실은 부적합합니다.

0

모두 물론 다릅니다. 그것은 항상 영향을 미칠 것입니다.그러나 데이터베이스와 동일한 서버에서 실행되는 응용 프로그램과 각 바이트가 포함 된 열에 대해 이야기 할 경우 영향은 중요하지 않습니다.

한편 네트워크를 통해 데이터베이스에 액세스하는 클라이언트에 대해 (문자열 * 255)와 같은 190 개의 추가 열을 추출하는 경우 네트워크 관리자가 사용자를 생생히 잡을 수 있다면 큰 문제가됩니다. .

두 경우 모두 너무 많은 불필요한 열을 쿼리하는 것은 그리 우아하지 않습니다. 필요한 열만을 요구하도록 쿼리를 조정하지 않는 것이 좋습니다. 다른 문제가 발생하는 "select * from ..."을 사용한다고 가정합니다. 누군가가 열을 추가하거나 열을 삭제하면 프로그램이 차단됩니다.

0

우리에게 묻는 대신, 이것은 사용자가 직접 테스트해야하는 것입니다. 데이터베이스와 뷰의 구조, 쿼리의 구조 및 보유한 장비 혼합에 따라 대답이 달라질 수 있습니다. 관련된 테이블에서 직접 4 개의 열을 선택하여 테스트를 선택하면 성능 차이가 있는지를 알 수 있습니다. 뷰에 뷰가 쌓여 있다면 측정 가능한 차이를 발견 할 수 있다고 생각합니다. 뷰가 하나만 있으면 큰 문제는 아닐 수도 있습니다.

관련 문제