2014-06-11 6 views
1

뷰가 작동하는 방식과 뷰를 직접 사용하고 테이블을 직접 쿼리하는 방식을 사용하는 것이 가장 중요합니다. 여기 내 시나리오 :테이블 또는 뷰를 쿼리하는 것이 더 효율적입니까?

  1. 기본 데이터의 모든 표는 네 개의 열이 포함
  2. 데이터 세 달의 가치를 저장하는 하나의 테이블에 상주 : '태그 이름', '알람', '타임 스탬프'와 '값'; 'TagName'및 'Timestamp'의 색인이 생성됩니다.
  3. 1 주일 분량의 데이터를 표시하고 '경보'와 '값'을 하나의 열에 결합하는이 테이블 (다른 테이블은 포함되지 않음)이 있습니다.
  4. 이 시나리오에서 사용되는 데이터베이스는 SQL Server입니다.

5 분에서 30 분 분량의 데이터 만 검색하면됩니다. 'Alarm'과 'Value'를 하나의 열 (뷰와 같은)에 결합하고 시간 범위를 동적으로 설정하거나 시간 범위를 지나서 기존 뷰를 쿼리하는 기본 테이블에 대한 쿼리를 작성하는 것이 더 효율적입니까? 나에게있어서 전자는 본질적으로 두 가지 질의가 필요하기 때문에 갈 길과 같이 보인다. 또한, 제 2 시나리오에서, 제 1 질의 (즉, 뷰)는 불필요한 수의 값을 메모리에로드 할 것이다.

+0

테스트 해 보셨습니까? – Brandon

+0

어떤 DBMS를 사용하고 있습니까? MySQL은 뷰를 사용하여 쿼리를 최적화 할 때 악명이 높습니다. 그러나 설명만으로 알 수 있습니다. –

답변

0

일반적으로보기를 사용하여 가능한 한 쿼리를 단순화해야합니다. 이렇게하면 응용 프로그램 관리가 단순 해지고 쿼리 논리 (조인 및 WHERE 절)가 반복되지 않도록 할 수 있습니다. 그러나 조회는 특정 조회에 적합하지 않을 수 있으며 이는 특정 조회에서 불필요한 조작이 필요하지 않을 수 있으므로 성능에 좋지 않습니다. 뷰는 불필요한 복잡성을 초래할 때 학대를받습니다.

+0

여기에서 뷰를 보류하거나 반대하지는 않지만 뷰를 사용하는 쿼리를 바꿔서 이전의 성능 문제를 해결했습니다. 뷰가 외부 쿼리가 아닌 여러 테이블에 합류하기 때문입니다 필요한 것. – Brandon

2

단일 테이블의 데이터가 크지 않다면 테이블을 쿼리하는 것이 먼저 뷰를 생성하고 한 단계를 피하므로 필요한 데이터를 쿼리하는 것보다 빠릅니다.

데이터가 많지 않고 where 절에있는 열이 적절하게 색인화되는 경우 일반적으로 쿼리는 테이블로 직접 이동해야합니다 (대부분의 경우 더 빠름).

단일 테이블에 매우 큰 데이터가 있고 매우 작은 하위 집합에서 매우 자주 작업해야하는 경우 뷰를 사용해야합니다. 이 경우 뷰는 필요한 데이터를 한 번만 가져오고이를 통해 검색 쿼리 (단일 테이블 또는 조인에서)를 다시 실행하는 것을 최소화하는 데 도움이됩니다.

솔루션에 도달하기 전에 유효성 검사/귀하의 데이터, 요구 사항을 이해하고 두 가지 접근법을 모두 사용하여 한 번 실행하고 시간을 비교하십시오 (테이블에 대한 쿼리가 승자가되어야한다고 생각합니다).

희망이 도움이됩니다.

관련 문제