SQLShack (한국어)

CREATE VIEW SQL 문을 배우는 일련의 네 번째 기사입니다. 지금까지 T-SQL 을 사용하여 뷰를 만들고 변경하는 작업을 많이 수행했습니다. 이 마지막 부분에서는 인덱싱 된 뷰로 작업하는 방법을 크게 살펴보고 싶습니다.

항상을 함께 따라가 시리즈의를 읽고 이전 부품을 먼저 다음이 하나입니다., 이것은 주로 때문에 우리가 만들어 우리 자신의 샘플 데이터베이스와 개체에 그것은 처음부터는 우리가 사용하는 것이 너무 부분이지만,또한 것이기 때문에 더 쉽게 큰 그림을 보십시오.

여기에는 이전에 세 개의 보기 만들기 SQL 시리즈:

  • 만들기 뷰에서 SQL Server
  • 전망 수정에서 SQL Server
  • 데이터를 삽입을 통해 전망에서 SQL Server

그 머리를 통해 읽을 사람들을 계속하기 전에이다.

소개

우리가 할 첫 번째 일은 인덱싱 된 뷰를 만드는 것입니다., 물론 시리즈를 통해 여러 번했던 것처럼 CREATE VIEW SQL 문을 사용할 것입니다. 그러나 일반적인 아이디어를 제목으로 말하는 것을 볼 작업하는 방법으로 색인 전망을 참조하십시오 요구 사항이 무엇인지를 추가하는 인덱스 보기,그리고 그것을 어떻게 프로그래밍 방식으로 보여줍니다. 또한 인덱싱 된 뷰의 장점을 설명하기 위해 SQL Server 에서 실행 계획을 살펴 보겠습니다. 이 찾아 느린 실행 쿼리에서 병목 현상을 해결에 올 때 그들은 Dba 와 개발자를위한 훌륭한 도구입니다.,

Without further ado,let’s create 보기 만들기를 사용하여 SQL 문이 아래에서 그것이 무엇을 볼 수 있습니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
사용 SQLShackDB;
GO
만들기 dbo.,이 작업을 수행 할 때 직원 수를 늘리는 것이 더 좋지만 직원 수를 늘리는 것이 더 좋지만 직원 수를 늘리는 것이 더 좋습니다.제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름제품 id,
SUM(가격*양)로 SaleTotal,
SaleDate
에서 dbo.직원
dbo 에 가입하십시오.직원에 대한 판매.고용인=판매.Dbo 에 가입하십시오.판매에 제품.ProductID=제품.직원 별 ProductID
그룹.제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름ProductID,
판매.,SaleDate;
GO

알 수 있는 뷰가 있으로 스키마 바인딩에서 옵션을니다. 이 옵션이 켜져있는 이유는 뷰에 인덱스를 만들 때 실제로 물리적으로 데이터베이스에 저장되기 때문입니다. 다른 말로하면,이 견해가 의존하는 것은 무엇이든,테이블에 관한 한,구조는 우리가 참조하는 것에서 바뀔 수 없습니다.따라서 뷰 정의에 영향을 미치는 방식으로 수정할 수 없도록 기본 테이블에 바인딩해야합니다., 우리가 어떤 식 으로든 그들을 바꾸려고한다면,SQL Server 는이 견해가 무언가에 달려 있다고 말하는 오류를 던질 것입니다. 그래서 뷰에 인덱스를 만들기위한 어려운 요구 사항으로 살펴보십시오.

한 번의 명령이 성공적으로 실행해야 합 보 vEmployeeSalesOrders 보기 뷰에서 폴더를 개체 탐색기에서 아래와 같이

뷰의 정의는 조금 더 복잡한 쿼리가 있습니다. 우리는 SELECT 문 다음에 GROUP BY 절에 집계를 얻었습니다., 기억을 때,우리가 집에서 쿼리를 추가하는 번호 함께,그래서 우리는 그룹에 의해 절입니다.

기본적으로 쿼리에 GROUP BY 가있을 때 집계를 제외한 select 목록에있는 모든 것을 기준으로 그룹화해야합니다.,

지금,나는 이미 만들어 보고,그러나 그것은 항상 좋은 아이디어 테스트의 정의합 보기만 실행하여 선택의 일부를 만들기 SQL 문을 무엇을 보고 그것을 반환합니다.

이동하기에,여기에 어떻게 여부를 확인할 수 있습니다 스키마밖에 없는 옵션이 사용되거나 사용되지 않습니다., 을 통해 머리를 개체 Explorer,확장 전망,마우스 오른쪽 버튼으로 클릭합 보기고 속성을 선택합니다.

중 다른 모든 정보에서 보기 속성을 창조 경우 스키마 바드 옵션을 설정 참 또는 거짓에서 일반적인 페이지입니다.

인덱싱된 뷰 만들기

이동 하 고 우리의 뷰에 인덱스를 만들 수 있습니다., Consider the script from below for creating a clustered index on the vEmployeeSalesOrders view:

1
2
3
4
5
6

USE SQLShackDB;
GO
CREATE UNIQUE CLUSTERED INDEX CAK_vEmployeesSalesOrders
ON dbo.,vEmployeeSalesOrders(EmployeeID,제품 id,SaleDate);
GO

경우에 우리는 실행 버튼 또는 카탈로그 뷰 쿼리,SQL 서버는 오류를 말하는 index 만들 수 없습니다:

여기에 오류 메시지에서 볼 수 없는 탄 위

을 만들 수 없음에 인덱스 보’SQLShackDB.dbo.vEmployeeSalesOrders’선택 목록에 COUNT_BIG 의 적절한 사용이 포함되어 있지 않기 때문입니다. COUNT_BIG(*)를 선택 목록에 추가하는 것을 고려하십시오.,

우리는 우리의 관점에서 GROUP BY 를 사용하고 있다는 사실을 감안할 때이 경우 COUNT_BIG 가 필요합니다.

일반적으로 COUNT,SUM,AVG 등과 같은 집계를 사용하는 경우 인덱스의 선택 목록에서,우리는 또한 그것에 인덱스를 생성하기 위해 COUNT_BIG 를 포함해야합니다.이것이 바로 우리가 할 일입니다.,를 사용하여 만들 VIEW SQL 문을 추가 COUNT_BIG 하는 선택을 사용하여 목록을 스크립트에서 아래:

iv id=”67254c6827지금까지 모든 것이 좋아 보인다. 우리는 성공적으로 변경의 정의는 우리의 보기

이제 우리는 다시 얻을 수 있습을 만드는 인덱스에서 볼 수행하여 이전에 사용되는 스크립트 중 하나 더 많은 시간입니다., 이번에는 작업이 원활하게 완료됩니다. 는 경우에는 개체의 탐색기를 확장하고 인덱스는 폴더의 우리의보기에,우리는 볼 수 있습니다 새로 만들어진 인덱스:

여기에서,우리가 오른쪽 클릭하여 인덱스를 선택성,일반 페이지에서,당신이 볼 수 있는 뷰 이름 지수 이름,유형,키 열,etc.,:

경우 우리가 스위치를 통해 저장,당신이 볼 수는 있는 그룹이기 때문에 육체적으로 데이터베이스에 저장된다.

또한, 우리가 스위치를 통해 조각,그것은 총 조각은 제%가 가지고 있기 때문에 우리는 몇 가지 기록에 우리의 테이블:

고에 대한 자세한하지만 재미있고 읽기 쉬운 프라이머에 유지 관리 및 모니터링 SQL 인덱스가? SQL 인덱스 유지 관리를 확인하십시오.,

인덱스 삭제

더 이상 진행하기 전에 인덱스를 어떻게 삭제할 수 있는지 살펴 보겠습니다. 가장 쉬운 방법은 객체 탐색기에서 색인을 마우스 오른쪽 버튼으로 클릭하고 삭제 옵션을 사용하는 것입니다. 그러나 한 번에 여러 인덱스를 드롭해야하는 경우 드롭 인덱스 문이 편리합니다. 왜냐하면 결국 이것은 CREATE VIEW SQL 문을 배우는 것에 관한 T-SQL 시리즈이기 때문입니다.,

Use the script from below to drop the CAK_vEmployeesSalesOrders index:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
사용 SQLShackDB;
GO
ALTER VIEW dbo.,이 작업을 수행 할 때 직원 수를 늘리는 것이 더 좋지만 직원 수를 늘리는 것이 더 좋지만 직원 수를 늘리는 것이 더 좋습니다.제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름제품 id,
SUM(가격*양)로 SaleTotal,
SaleDate,
COUNT_BIG(*)AS RecordCount
에서 dbo.직원
dbo 에 가입하십시오.직원에 대한 판매.고용인=판매.Dbo 에 가입하십시오.판매에 제품.ProductID=제품.직원 별 ProductID
그룹.제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름,제품 이름ProductID,
판매.,SaleDate;
GO
1
2
3
4
5

USE SQLShackDB;
GO
DROP INDEX CAK_vEmployeesSalesOrders ON dbo.,vEmployeeSalesOrders;
GO

때 당신을 위해 여러 인덱스,다만 모두 지정한 이름을 쉼표로 구분됩니다.

생성하는 임의의 데이터

,이제는 우리의 인덱스,하자의 생성 일부를 임의의 데이터에 우리의 표는 우리가 볼 수 있는 실행 계획 및 보는 방법 SQL 서버 데이터를 가져옵니다. 분석 실행 계획이의 차이를 보여준에서 어떻게 성능에 의해 영향을 받는 쿼리를 실행하지 않고 인덱스 보기입니다.,

스크립트를 사용하여 아래에서 삽입 50000 임의의 기록으로 판매 테이블:

난지 않을 통해서 스크립트 내용이지만,그것은 기본적으로 반복 실행되는 50000 시간 및 삽입하는 임의의 데이터를 식별할 수 있습니다., 을 확인하는 경우에 레코드가 삽입되는 성공적으로 실행하고 다음을 선택하는 문이 계산됩니다 모든 레코드 판매에서 테이블:

1
2
3
4
사용 SQLShackDB;
GO
SELECT COUNT(*) 에서 판매

번호를 반환되는 것을 보여줍 있 50006 행 식별할 수 있습니다., 이 레코드의 수 그리고 우리가 생성되+6 우리는 처음 있었다.

분석을 실행 계획

이제 우리는 일부터리 테이블,우리는 정말 수 있습을 보여주의 사용에 인덱스입니다. VEmployeeSalesOrders 보기를 쿼리하고 SQL Server 에서 데이터를 검색하는 방법을 살펴 보겠습니다., Before executing the SELECT statement from below, make sure to include the Actual Execution Plan as shown below:

1
2
3
4

USE SQLShackDB;
GO
SELECT * FROM dbo.,vEmployeeSalesOrders;

이 스크립트는 반환 23814 행하지만,무엇보다 중요한 것,그것이 생성된 실행 계획의 쿼리가 있습니다. 우리가 이전에 우리의 견해에 색인을 떨어 뜨렸다는 것을 기억하십시오. 그래서 지금 당장은 우리의 견해에 대한 색인이 없습니다. 따라서,SQL 서버는 몇 가지 테이블의 검사는 아래와 같이

이는 최악의 것은 데이터베이스에서,특히,세계에서 테이블과 함께 많은 양의 데이터가 있습니다., 그것은 좋아하는 검사 테이블의 작은 금액으로 데이터 등의 경우에는 우리 직원들과 제품의 테이블,하지만 그것은 나쁜 매출 테이블을 가지고 있기 때문에 50K+기록합니다.

는 가장 쉬운 방법을 제거하는 테이블의 스캔들에 인덱스이기 때문에 그것을 극적으로 속도를하는 것입니다. 그래서,우리가 무엇을 할 것이 이 문제를 해결하는 것은 다시 실행 스크립트를 만들기 위한 독특한 클러스터에 인덱스 vEmployeeSalesOrders 보기입니다.

이제 SELECT 문을 다시 실행하면 방금 인덱스를 만들었더라도 차이가 없습니다. 왜 그런가?, 기 때문에 나가 사용하여 SQL Server 익스프레스 버전의 목적을 위해 이 시리즈에서만 기업과 개발자 버전의 SQL 서버는 쿼리를 최적화 프로그램이 실제로 색인으로 고려 사항입니다.

실행 계획을 생성 할 때 실제로 sql Server 에서 인덱스를 사용하도록 강제 할 수 있기 때문에 걱정할 필요가 없습니다. 이 작업은 NOEXPAND 옵션을 사용하여 수행됩니다., NOEXPAND 에만 적용되는 인덱싱 보기

1
SELECT*FROM dbo.vEmployeeSalesOrders 로(NOEXPAND)

처럼,우리는 강제 SQL 서버를 사용하여 클러스터 인덱스는 기본적으로 의미하지 않는 사용은 기본 테이블을 때 가져오는 데이터입니다., 으로 볼 수 있는 아래,우리는 일부분을 제거하여 다수의 운영:

사실,우리가 할 수 있습 executeboth SELECT 문을 동시에 결과를 비교하여 실행 계획:

것을 보니까? 우리가 비교한다면 쿼리 비용 최초의 선택 문(w/o 인 95%)두 번째로 선택하 statement(w/색인 5%),내가 말하는데 큰 성과를 얻을 사용하는 단일 인덱스입니다.,

결론

인덱스가 좋기 때문에 그들은 속도 성능 및 인덱스에서보기는 그것이 정말로 가속기 때문에 성능 인덱스는 데이터베이스에 저장됩니다. 인덱싱 모두 보기와 테이블은 하나의 가장 효율적인 방법의 성능을 개선하기 위해 쿼리와 응용 프로그램을 사용하여 그들을.

이 기사를 통해 물건을 마무리하고 CREATE VIEW SQL 문을 배우는 시리즈를 끝내고 싶습니다. 우리는 t-SQL 로 뷰를 만들고 변경하는 것에 관한 모든 것을 거의 다루었습니다., 우리는 CREATE VIEW SQL 문으로 시작하여 몇 가지 뷰를 만들고 변경,삭제 등을 시작했습니다.

CREATE VIEW SQL 문을 배우는 시리즈가 당신에게 유익했기를 바라며 읽어 주셔서 감사합니다.,

CREATE VIEW SQL:데이터를 삽입을 통해 전망에서 SQL Server

CREATE VIEW SQL: 작업에서 인덱스 SQL Server

  • 저자
  • 최근 게시글
보얀 일명”Boksi”,AP 대학원에서는 IT 기술에 초점을 맞춘 네트워크와 전자 기술에서 코펜하겐의 학교 디자인과 기술,소프트웨어 분석과 경험에서 품질 보증,소프트웨어 지원,제품 전도하고,사용자 참여.,
그에 광범위하게 쓰여 SQL 판잣집 및 ApexSQL 솔루션 센터에 이르기까지 주제는 클라이언트에게서 기술을 4K 해상도와의 테마,오류 처리하는 인덱스 전략 및 성과 모니터링합니다.
보얀에서 작동 ApexSQL 에 Nis,세르비아의 중요한 부분으로 팀에 초점을 맞춘 디자인,개발,그리고 테스트하는 다음 세대의 데이터베이스 도구를 포함하여 MySQL 및 SQL Server,and both stand-alone 도구와의 통합으로 Visual Studio,SSMS 및 VSCode.,
에 대해 더 자세히 보얀에서 LinkedIn
모두 보기 게시물에 의해 보얀 페트로
최근 게시물에 의해 보얀 페트로(모든)
  • Visual Studio 코드 MySQL 및 MariaDB 개발-August13, 2020 년
  • SQL 업데이트한 구문 설명-July10,2020 년
  • CREATE VIEW SQL:로 작동 인덱싱망에서 SQL Server-March24,2020 년

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다