뷰(View) 는 일반 사용자 입장에서는 테이블과 동일하게 사용하는 개체다. 뷰는 한 번 생성하면 테이블 이라고 생각하고 사용해도 될 정도로 사용자의 입장에서는 테이블과 거의 동일한 개체로 여겨진다.
뷰는 데이터가 데이터베이스에 물리적으로 저장되지 않기 떄문에 '가상 테이블' 또는 저장된 쿼리 라고 볼 수 있다.
뷰의 장점
- 사용자 관점의 데이터 제공
- 데이터베이스 복잡성을 숨김
- 사용자 권한 관리 단순화
- 성능 향상
- 다른 응용프로그램으로 내보낼 데이터 재구성
뷰의 종류
표준 뷰
한 개 또는 그 이상의 테이블을 이용해서 만든 뷰를 표준 뷰라고 부른다. 사용빈도가 가장 높다.
분할 뷰
- 한 대 또는 여러 대의 서버에 있는 테이블을 조인해서 하나의 테이블처럼 보이도록 하는 뷰.
- 분할 뷰에는 로컬 분할 뷰와 분산형 분할 뷰가 있다.
- 로컬 분할 뷰는 여러 테이블이 모두 한 대의 SQL Server에 존재하는 것을 의미한다.
- 분산형 분할 뷰는 여러 테이블이 여러 대의 SQL Server에 존재하는 것을 의미한다.
- 분산형 분할 뷰의 경우에는 대용량 데이터베이스를 여러 서버에 걸쳐서 분산해서 처리하기 위한 방식으로 활용될 수 있다.
인덱싱된 뷰
- 뷰를 가상의 테이블이라고 부른다. 즉 뷰의 실체는 SELECT 문이며 그 내용은 없고 뷰를 호출할 때 실시간으로 실제 테이블을 쿼리하게 된다.
- 인덱싱된 뷰는 예외적으로 테이블처럼 실제 데이터가 뷰에 들어있다. 인덱싱된 뷰에는 인덱스를 구성하는 실제 데이터가 들어있다.
- 뷰의 단점중 하나는 대량의 데이터를 조인하는 내용을 포함할 경우에, 실시간으로 쿼리가 수행되는 것이므로 SQL SERVER에 큰 부하를 줄 수 밖에 없다(이것은 테이블을 직접 조회하는 것도 마찬가지기는 하다.)
- SQL SERVER의 부하는 줄이는 방법으로 뷰에 실제 데이터를 미리 가져다 놓은 것이다. 그러면 이 뷰가 조회될 경우에 더 이상 대량의 데이터를 조인하는 작업이 필요 없이. 직접 뷰에서 데이터를 가져 오면 되므로 크게 향상될 수 있다. 이러한 구성은 성능을 향상시키는 장점도 있지만 동시에 단점도 생긴다. 표준 뷰는 데이터를 가지고 있지 않아서 공간을 차지하지 않지만. 인덱싱된 뷰는 별도의 공간이 필요하다. 또한 실제 테이블의 데이터가 수정될 경우에 이 인덱싱된 뷰의 데이터도 수정되어야 하기 때문에 데이터의 변경이 잦을 경우 테이블의 수정뿐 아니라, 인덱싱된 뷰 까지 동시에 수정하는 것이므로 시스템의 성능에 나쁜 영향을 줄 수 있다.
- 결론적으로 인덱싱된 뷰는 조회는 자주 있지만, 수정은 가끔 있는 테이블에 구성하는 것이 바람직 하다.
시스템 뷰
- SQL SERVER는 상태 및 내부의 정보를 관리하기 위한 시스템 테이블을 가지고 있다.
- 일반 사용자가 시스템 테이블에 직접 접근하지 못하도록 되어있다.
- 시스템 테이블에 대한 정보도 별도로 문서화 되어 있지 않다.
- 그 대신 시스템의 상태를 파악하기 위해서 시스템 뷰를 사용하도록 제공한다.
- 시스템 뷰는 SQL SERVER의 상태 등에 관한 정보를 보여주는 뷰를 말한다. SQL SERVER의 시스템 뷰에는 카탈로그 뷰, 정보 스키마 뷰, 호환성 뷰, 복제 뷰 동적 관리 뷰 함수 등으로 나뉘며 이 중에서 카탈로그 뷰가 가장 사용 빈도가 높다.
- SELECT * FROM SYS.DATABASES
구문
-- Syntax for SQL Server and Azure SQL Database
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ]
[ ; ]
<view_attribute> ::=
{
[ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW_METADATA ]
}
CREATE VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
AS <select_statement>
[;]
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
인수
OR ALTER
이미 있는 경우에만 뷰를 조건부로 변경 합니다.
SCHEMA_NAME
뷰가 속한 스키마의 이름입니다.
VIEW_NAME
뷰의 이름 입니다. 뷰 이름은 반드시 식별자에 적용되는 규칙을 준수해야 합니다. 뷰 소유자 이름을 지정하는 것은 선택 사항 입니다.
COLUMN
뷰에 있는 열에 사용할 이름 입니다. 열이 산술 식, 함수 또는 상수에서 파생된 경우, 일반적으로 조인 떄문에 둘 이상의 열이 같은 이름을 갖는 경우,뷰의 열이 파생된 열과 다른 이름을 갖는 경우에만 열 이름이 필요합니다. SELECT 문에서 열 이름을 할당할 수도 있습니다.
COLUMN 을 지정하지 않으면 뷰 열의 이름과 SELECT 문에 있는 열의 이름이 같아집니다.
인수에 대한 자세한 내용은 아래의 링크 참조
docs.microsoft.com/ko-kr/sql/t-sql/statements/create-view-transact-sql?view=sql-server-ver15
CREATE VIEW(Transact-SQL) - SQL Server
CREATE VIEW(Transact-SQL)
docs.microsoft.com
'데이터베이스' 카테고리의 다른 글
| SQL 데이터베이스 함수란? (0) | 2021.05.20 |
|---|---|
| 저장 프로시저 (0) | 2021.04.29 |
| 인덱스 생성/변경/삭제 (0) | 2021.04.27 |
| 인덱스 (0) | 2021.04.23 |
| 인덱스 (0) | 2021.04.22 |
