TIL Postgres:뷰 및 물적 뷰

무엇이 경관입니까?


간단하게 말하면 aview는 조회의 간편하고 빠른 방식이다.보기를 만드는 데는 새 테이블이나 데이터가 포함되지 않습니다.실행할 때 기본 검색을 실행하고 그 결과를 사용자에게 되돌려줍니다.

기본 예


만약에 우리가 한 대학의 데이터베이스에서 다음과 같은 표를 얻었다고 가정하면 다음과 같다.

학생.


신분증
이름:
타입
1
아론
대학생 명사
2
자크
졸업하다.

즐겁다.
졸업하다.

교과 과정


신분증
타이틀
코드
1
박사후 소개
PG101
2
인증 이론
AUTH205

Supabase의 기본 원리
SUP412

점수


신분증
학생증
과정 번호
결실
1
1
1
B+
2
1

A+

2
2
A
4

1
A-
5

2
A
6


B-
세 테이블이 모두 포함된 뷰를 다음과 같이 만듭니다.
CREATE VIEW transcripts AS
    SELECT
        students.name,
        students.type,
        courses.title,
        courses.code,
        grades.result
    FROM grades
    LEFT JOIN students where grades.student_id = students.id
    LEFT JOIN courses where grades.course_id = courses.id;
완료되면 다음과 같은 방법으로 기본 질의에 쉽게 액세스할 수 있습니다.
SELECT * FROM transcripts;
추가 매개변수 또는 옵션은 here을 참조하십시오.

우리는 왜 그것을 써야 합니까?


뷰는 다음 영역에 기반한 데이터를 읽는 데 유용합니다.

간단히


검색이 복잡해지고 여러 줄을 차지하기 시작하면, 그것을 호출하는 것은 매우 번거롭다.우리가 그것을 정기적으로 운행할 때, 그것은 더욱 뚜렷해진다.위 예제에서는 반복해서 실행하지 마십시오.
SELECT
    students.name,
    students.type,
    courses.title,
    courses.code,
    grades.result
FROM grades
LEFT JOIN students where grades.student_id = students.id
LEFT JOIN courses where grades.course_id = courses.id;
다음 프로그램을 실행할 수 있습니다.
SELECT * FROM transcripts;
그 밖에 보기의 행위는 전형적인 표와 유사하다.따라서 우리는 그 어떠한 후속JOIN 조회에도 안전하게 사용할 수 있고 다른 보기와 관련된 조회에서 보기를 만들 수 있다.

일치성


간단함을 제외하고 보기는 일치성을 가져와 조회를 반복할 때 오류가 발생할 가능성을 낮춘다.위의 조회에 관해서는 다른 조회의 일부분일 수 있습니다.언젠가는 박사후 과정 소개를 배제하고 싶다고 결정할지도 모른다.이러한 문제는 다음과 같습니다.
SELECT
    students.name,
    students.type,
    courses.title,
    courses.code,
    grades.result
FROM grades
LEFT JOIN students where grades.student_id = students.id
LEFT JOIN courses where grades.course_id = courses.id
WHERE courses.code != 'PG101';
만약 보기가 없다면, 우리는 모든 의존 조회에 들어가서 새로운 규칙을 추가해야 한다.이렇게 하면 타자 오류와 관련 조회가 누락되어 오류와 일치하지 않을 가능성이 높아진다.보기에 대해, 우리는 보기 기록의 기초 조회를 바꾸기만 하면 된다.변경 사항은 이 보기를 사용하는 다른 모든 조회에 적용됩니다.

논리 조직


보기를 통해 우리는 조회의 이름을 붙일 수 있다.같은 데이터베이스를 사용하는 팀에서 이렇게 하는 것은 매우 유용하다.검색이 무엇을 의미하는지 추측하기보다는, 좋은 보기로 설명하는 것이 좋다.예를 들어 성적표의 이름을 살펴보면 밑바닥 조회가 학생, 과정과 성적표에 관련될 수 있다고 추정할 수 있다.

보안


보기를 사용하면 사용자에게 표시되는 데이터의 양과 유형을 제한할 수 있습니다.우리는 사용자가 테이블에 직접 접근하는 것을 허락하지 않고, 그들에게 보기를 제공한다.그것 때문에 우리는 기초 검색에 민감한 열을 포함하지 않아서 민감한 열을 읽는 것을 방지할 수 있다.

무엇이 물화시도입니까?


Amaterialized view는 보기의 한 형식이지만 결과 데이터를 물리적으로 메모리에 저장하는 부가 기능이 있다.같은 밑바닥 조회에 대해 후속으로 물적 보기를 읽을 때 결과를 되돌리는 데 걸리는 시간이 전통적인 보기보다 훨씬 빠르다.이는 데이터가 물화시도에 대해 이미 만들어진 것이고 전형적인 시도는 현장에서만 밑바닥 조회를 실행하기 때문이다.

기본 예


위와 같은 테이블 및 기본 조회 세트를 사용하면 새로운 물적 뷰는 다음과 같습니다.
CREATE MATERIALIZED VIEW transcripts AS
    SELECT
        students.name,
        students.type,
        courses.title,
        courses.code,
        grades.result
    FROM grades
    LEFT JOIN students where grades.student_id = students.id
    LEFT JOIN courses where grades.course_id = courses.id;
그런 다음 이렇게 물적 뷰를 읽을 수 있습니다.
SELECT * FROM transcripts;
추가 매개변수 또는 옵션은 here을 참조하십시오.

산뜻하다


불행하게도, 물화시도의 데이터가 항상 최신식은 아니다.우리는 데이터가 너무 낡아지지 않도록 정기적으로 그것을 갱신해야 한다.이 경우:
REFRESH MATERIALIZED VIEW transcripts;

우리는 언제 이걸로 전통적인 관점을 대체해야 합니까?


조회나 보기의 실행 시간이 견딜 수 없거나 업무를 초과한 서비스 등급 협의가 되면 물적 보기가 도움이 된다.이것들은 여러 개의 테이블과 수십만 줄의 보기나 조회에서 발생할 수 있다.그러나 이러한 보기를 사용할 때 데이터는 최신의 용인도가 아니어야 한다.우리는 데이터가 시간의 추이에 따라 너무 유행이 지났지 않도록 정기적으로 업데이트를 안배해야 한다.
주의해야 할 것은 물적 보기를 만드는 것이 저효율 조회의 해결 방안이 아니라는 것이다.물화시도를 실현하기 전에 천천히 실행되는 검색을 최적화하는 모든 옵션을 사용해야 한다.

결론


Postgres 보기와 물적 보기는 자주 사용하는 검색 결과를 조직하고 보는 좋은 방법입니다.비록 서로 매우 비슷하지만 모두 목적이 있다.보기는 조회를 실행하는 과정을 간소화시켰다.물화시도는 운행 속도가 느린 조회에 접근하는 과정을 가속화함으로써 이 점을 증가시켰지만, 유행이 지났거나 업데이트되지 않은 데이터가 있는지 따져야 한다.
TIL Postgres는 Supabase PostgreSQL에 대한 정보를 정기적으로 공유하고 새로운 학습 내용을 제공하기 위한 시리즈입니다.😉
Dell의 향후 기능과 무료 사은품에 대한 새로운 게시물이나 공지가 DEV first에 게시됩니다.우리를 따라와, 이렇게 하면 너는 놓치지 않을 거야.

좋은 웹페이지 즐겨찾기