복붙노트

[SQL] 빠르고 간단한 쿼리보다보기인가?

SQL

빠르고 간단한 쿼리보다보기인가?

하는

select *  from myView

빨리 (같은 결과 집합이하기 위해) 뷰를 만들 수있는 쿼리 자체보다 :

select * from ([query to create same resultSet as myView])

?

보기가 캐싱보다 빠르고 간단한 쿼리에 비해 제작의 일종을 사용하는 경우 그것은 완전히 나에게 분명하지 않다.

해결법

  1. ==============================

    1.예,보기는 그들이 할 때, 그들은 쿼리 결과 속도를 높일 수의 임시 결과를 저장하는 것, 할당 된 클러스터 된 인덱스를 가질 수 있습니다.

    예,보기는 그들이 할 때, 그들은 쿼리 결과 속도를 높일 수의 임시 결과를 저장하는 것, 할당 된 클러스터 된 인덱스를 가질 수 있습니다.

    업데이트 : 적어도 세 사람이 한 날을 부결했다. 외람된, 나는 그들이 단지 잘못 생각; 마이크로 소프트의 문서는 매우 명확 조회수 성능을 향상시킬 수 있습니다.

    첫째, 단순한 뷰는 장소에서 전개되고있는 등 직접 성능 향상에 기여하지 않는 - 매우 사실이다. 그러나, 인덱싱 된 뷰 성능을 크게 향상시킬 수 있습니다.

    나 문서로 직접 이동하자

    그들이 직접 적절한 테이블 참조의 장소에 사용하는 최적화와 같은 다른 쿼리에 의해 참조되지 않는 경우 둘째, 이러한 인덱싱 된 뷰도 작업 할 수 있습니다.

    다시 말하지만, 문서 :

    이 문서뿐만 아니라 성능 향상을 보여주는 차트는 여기에서 찾을 수 있습니다.

    업데이트 2 : 답은 (는) 성능 이점을 제공한다 "인덱스"가 아닌 것을 기초로 비판을 받아왔다 "보기." 그러나이 쉽게 반박한다.

    우리가 작은 나라의 소프트웨어 회사를 가정 해 봅시다; 내가 예를 들어 리투아니아를 사용합니다. 우리는 소프트웨어 전세계를 판매하고 SQL Server 데이터베이스에 기록을 유지한다. 우리는 매우 성공이고 그래서 몇 년 동안, 우리는 1,000,000+ 기록을 가지고있다. 그러나 우리는 종종 조세 목적 상 판매를보고해야하고 우리는 우리가 우리의 모국에서 우리의 소프트웨어의 100 개의 사본을 판매 한 것을 찾을 수 있습니다. 단지 리투아니아 기록의 인덱싱 된 뷰를 생성함으로써, 우리는 MS의 문서에 설명 된대로 우리가 인덱스 캐시에 필요한 기록을 유지 얻을. 우리는 2008 년 리투아니아어 판매에 대한 우리의 보고서를 실행하면, 우리의 쿼리는 (일부 사용되지 않은 잎 LOG2 (100)) 단지 (7)의 깊이와 인덱스를 검색합니다. 우리가보기없이 그냥 테이블에 인덱스에 의존 동일한 작업을 수행한다면, 우리는 (21)의 검색 깊이 인덱스 트리를 탐색해야 할 것!

    분명히,보기 자체는 혼자 인덱스의 간단한 사용에 성능상의 이점 (3 배)을 우리에게 제공 할 것이다. 나는 실제 예제를 사용하려했지만 당신 리투아니아 판매의 간단한 목록이 우리에게 더 큰 이점을 줄 것이라는 점을 알게 될 것이다.

    난 그냥 내 예를 들어 직선 B- 트리를 사용하고 있습니다. 나는 SQL Server가 B- 트리의 일부 변형을 사용하는 꽤 확신 동안, 나는 세부 사항을 알고하지 않습니다. 그럼에도 불구하고, 요점은 보유하고 있습니다.

    3 업데이트 : 문제는 인덱싱 된 뷰는 단지 기본 테이블에 배치 인덱스를 사용하는지 여부에 대해 올라와있다. 즉 의역에있다 : "인덱스 된 뷰는 표준 인덱스의 단지와 동일하고보기에 새로운 또는 고유 아무것도 제공하지 않습니다." 이것이 사실이라면, 물론, 그 위의 분석은 잘못된 것입니다! 제가이 비판이 유효하지 않거나 사실이 아니다 생각하는 이유 설명은 Microsoft 문서에서 인용을 제공 보자 :

    함께 물리적 스토리지 및 인덱스가 뷰에 생성하는 방법에 대한 문서의 다른 정보 데이터의 지속성에 대한 위의 견적, 나는 인덱싱 된 뷰는 단지를 사용하는 일이 캐시 된 SQL 선택이 아니라고하는 것이 안전하다고 생각 인덱스는 기본 테이블에 정의. 따라서,이 대답 대기를 계속합니다.

  2. ==============================

    2.일반적으로 더 말하기 없습니다. 뷰는 주로 속도 개선, 편의성과 보안되지 사용된다.

    일반적으로 더 말하기 없습니다. 뷰는 주로 속도 개선, 편의성과 보안되지 사용된다.

    즉, 말했다 2000 SQL Server 및 위의 성능을 크게 향상시킬 수있는 인덱싱 된 뷰라는 특별한 기능을 수행하지만 당신은 가이드 라인의 매우 구체적인 세트 다음 인덱싱 된 뷰를 만들어야합니다.

    보기 해상도에 관해서 온라인에서 중요한 참조가 있습니다.

    여기 장점과 인덱싱 된 뷰의 생성을 설명하는 문서입니다 :

  3. ==============================

    3.적어도 SQL Server에서 쿼리 계획은 쿼리 / 뷰 매개 변수를 기반으로, 뷰 및 일반 SQL 쿼리 모두에 대한 계획 캐시에 저장됩니다. 그들은 충분히 긴 기간 동안 사용하지 않은 한과 공간이 다른 새로 제출 된 쿼리에 대해 필요한 경우 모두, 그들은 캐시에서 삭제됩니다. 동일한 쿼리가 실행되면, 그 후에, 그것은 다시 컴파일 및 계획 캐시에 다시 배치됩니다. 그래서 더, 차이, 같은 SQL 쿼리와 동일한 주파수와 동일한 뷰를 재사용하는 것을 주어가 없다.

    적어도 SQL Server에서 쿼리 계획은 쿼리 / 뷰 매개 변수를 기반으로, 뷰 및 일반 SQL 쿼리 모두에 대한 계획 캐시에 저장됩니다. 그들은 충분히 긴 기간 동안 사용하지 않은 한과 공간이 다른 새로 제출 된 쿼리에 대해 필요한 경우 모두, 그들은 캐시에서 삭제됩니다. 동일한 쿼리가 실행되면, 그 후에, 그것은 다시 컴파일 및 계획 캐시에 다시 배치됩니다. 그래서 더, 차이, 같은 SQL 쿼리와 동일한 주파수와 동일한 뷰를 재사용하는 것을 주어가 없다.

    매우 자연의에 의해 분명히, 뷰, 일반적으로, 일반적으로 더 가능성이 임의의 SQL 문보다 "재사용"할 수있다 (즉, 누군가가보기에 그것을 만들기 위해 자주 사용되는 줄 알았는데).

  4. ==============================

    4.편집 : 내가 잘못했다, 당신은 위의 마크 답을 볼 수 있습니다.

    편집 : 내가 잘못했다, 당신은 위의 마크 답을 볼 수 있습니다.

    나는 SQL 서버와의 경험을 말할 수 없습니다 만, 대부분의 데이터베이스에 대한 대답은 '노 될 것이다. 뷰를 사용에서 당신이 얻을 수있는 유일한 잠재적 인 혜택, 현명한 성능, 그것은 잠재적으로 쿼리를 기반으로 몇 가지 액세스 경로를 만들 수 있다는 것입니다. 그러나보기를 사용하는 주된 이유는 쿼리를 단순화하기 위해 또는 테이블에 일부 데이터에 액세스하는 방법을 표준화하는 것입니다. 일반적으로, 당신은 성능 이점을받지 않습니다. 그래도 난 잘못 될 수있다.

    나는 자신을 볼 수있는 적당한 더 복잡한 예제와 시간이 올 것이다.

  5. ==============================

    5.당신이 (스키마 바인딩) 구체화 된 뷰를 만들 수 있다면 그것은 더 빠를 수 있습니다. 전망 그냥 일반 쿼리처럼 실행 비는-구체화.

    당신이 (스키마 바인딩) 구체화 된 뷰를 만들 수 있다면 그것은 더 빠를 수 있습니다. 전망 그냥 일반 쿼리처럼 실행 비는-구체화.

  6. ==============================

    6.나의 이해는 SQL 서버는 단지 대신 즉시 알아낼 하나에 노력하는 사용 후 실행 계획을 저장 할 수 있기 때문에 다시하면서, 뷰가 빠를 것입니다. 나는 예전과 같이 성능 향상 요즘 아마 크지 않다 생각하지만, 내가보기를 사용하는 몇 가지 한계 개선이있을 것이라고 추측 할 것입니다.

    나의 이해는 SQL 서버는 단지 대신 즉시 알아낼 하나에 노력하는 사용 후 실행 계획을 저장 할 수 있기 때문에 다시하면서, 뷰가 빠를 것입니다. 나는 예전과 같이 성능 향상 요즘 아마 크지 않다 생각하지만, 내가보기를 사용하는 몇 가지 한계 개선이있을 것이라고 추측 할 것입니다.

  7. ==============================

    7.확실히 뷰는 SQL Server에 대한 중첩 된 쿼리보다 낫다. 그것 (I 마크 Brittingham의 게시물을 읽을 때까지) 더 나은 이유를 정확하게 모른 채, 나는 몇 가지 테스트를 실행하고 중첩 된 쿼리 대보기를 사용하는 경우는 거의 충격 성능 향상을 경험했다. 행, 시간을 반으로 완성 된 쿼리의보기 버전에서 수백 번 쿼리의 각 버전을 실행 한 후. 나는 나를 위해 증거 충분 말하고 싶지만.

    확실히 뷰는 SQL Server에 대한 중첩 된 쿼리보다 낫다. 그것 (I 마크 Brittingham의 게시물을 읽을 때까지) 더 나은 이유를 정확하게 모른 채, 나는 몇 가지 테스트를 실행하고 중첩 된 쿼리 대보기를 사용하는 경우는 거의 충격 성능 향상을 경험했다. 행, 시간을 반으로 완성 된 쿼리의보기 버전에서 수백 번 쿼리의 각 버전을 실행 한 후. 나는 나를 위해 증거 충분 말하고 싶지만.

  8. ==============================

    8.나는 두 개의 쿼리가 동일하게 수행 할 것으로 예상한다. 보기는 저장된 조회 정의에 지나지 않는다, 캐싱 또는 뷰의 데이터 저장 없다. 당신이 그것을 실행할 때 최적화 효과적으로 두 번째 쿼리로 첫 번째 쿼리를 설정합니다.

    나는 두 개의 쿼리가 동일하게 수행 할 것으로 예상한다. 보기는 저장된 조회 정의에 지나지 않는다, 캐싱 또는 뷰의 데이터 저장 없다. 당신이 그것을 실행할 때 최적화 효과적으로 두 번째 쿼리로 첫 번째 쿼리를 설정합니다.

  9. ==============================

    9.그것은 모든 상황에 따라 달라집니다. MS SQL 인덱스 뷰는 빠르게 기본보기 또는 쿼리보다하지만 인덱싱 된 뷰는 미러 데이터베이스 invironment (MS SQL)에서 사용할 수 없습니다.

    그것은 모든 상황에 따라 달라집니다. MS SQL 인덱스 뷰는 빠르게 기본보기 또는 쿼리보다하지만 인덱싱 된 뷰는 미러 데이터베이스 invironment (MS SQL)에서 사용할 수 없습니다.

    뷰가이 루프에서 호출 할 때마다 다시 채워 때문에 루프의 모든 종류의 뷰는 심각한 침체의 원인이됩니다. 쿼리와 동일합니다. 이 상황에서 임시 테이블은 # 또는를 사용하여 @ 빠른보기 또는 쿼리보다 통해 루프에 데이터를 저장할 수 있습니다.

    그것은 그래서 모든 상황에 따라 달라집니다.

  10. ==============================

    10.그 이제까지 당신의 평범한 구식 SQL SELECT * X는 계획을 걸릴 이용하지 FROM 캐싱 등이 실제적인 다른도없고 당신은 BOL을 읽으면 당신은 발견 할 것이다

    그 이제까지 당신의 평범한 구식 SQL SELECT * X는 계획을 걸릴 이용하지 FROM 캐싱 등이 실제적인 다른도없고 당신은 BOL을 읽으면 당신은 발견 할 것이다

  11. ==============================

    11.이 실행 계획이 저장 한 몇 가지 사소한 이득을해야하지만, 그것은 무시할 수있을 것입니다.

    이 실행 계획이 저장 한 몇 가지 사소한 이득을해야하지만, 그것은 무시할 수있을 것입니다.

  12. ==============================

    12.뷰의 목적은 또 다시 쿼리를 사용하는 것입니다. 그 때문에, SQL 서버, 오라클 등 전형적으로하여 성능을 향상보기의 "캐시"또는 "컴파일 된"버전을 제공 할 것입니다. 쿼리가 정말 매우 간단 경우, 혜택은 무시할 수 있지만 일반적으로,이는 "간단한"쿼리보다 더 수행해야합니다.

    뷰의 목적은 또 다시 쿼리를 사용하는 것입니다. 그 때문에, SQL 서버, 오라클 등 전형적으로하여 성능을 향상보기의 "캐시"또는 "컴파일 된"버전을 제공 할 것입니다. 쿼리가 정말 매우 간단 경우, 혜택은 무시할 수 있지만 일반적으로,이는 "간단한"쿼리보다 더 수행해야합니다.

    당신이 복잡한 쿼리를하고 있다면 이제보기를 만들 수 있습니다.

  13. ==============================

    13.내 소견에서보기를 사용하여 조금 더 빨리 정상적인 쿼리보다. 내 저장 프로 시저는 약 25 분 복용 (다른 큰 레코드 세트 작업과 여러 조인)과 뷰를 사용 후 (비는 클러스터)하고, 성능은 조금 빠르지 만 중요하지 전혀이었다. 나는 그것이 극적인 변화하기 위해 다른 쿼리 최적화 기술 / 방법을 사용했다.

    내 소견에서보기를 사용하여 조금 더 빨리 정상적인 쿼리보다. 내 저장 프로 시저는 약 25 분 복용 (다른 큰 레코드 세트 작업과 여러 조인)과 뷰를 사용 후 (비는 클러스터)하고, 성능은 조금 빠르지 만 중요하지 전혀이었다. 나는 그것이 극적인 변화하기 위해 다른 쿼리 최적화 기술 / 방법을 사용했다.

  14. ==============================

    14.너무 많은 이해가되지 않습니다 뷰 또는 테이블에서 선택합니다.

    너무 많은 이해가되지 않습니다 뷰 또는 테이블에서 선택합니다.

    물론보기 당신은 쿼리의 실행 계획을 확인할 수 있습니다, 필드, 불필요한 조인 등이없는 경우, 조인 인덱스는보기 성능을 향상하는 데 사용됩니다.

    당신은 빠른 검색 요구 사항에 대한 뷰에 인덱스를 만들 수 있습니다. http://technet.microsoft.com/en-us/library/cc917715.aspx

    그러나 당신은 SQL 엔진보다 '% ... %'와 같이 검색 할 경우하는 텍스트 컬럼에 인덱스에서 도움이되지 않습니다. 당신이 좋아 '... %'검색을하는 사용자를 강제 할 수있는 경우보다 그 빠른 것

    ASP 포럼에 대답 함 : https://forums.asp.net/t/1697933.aspx?Which+is+faster+when+using+SELECT+query+VIEW+or+Table+

  15. from https://stackoverflow.com/questions/439056/is-a-view-faster-than-a-simple-query by cc-by-sa and MIT license