| PostgreSQL 9.3.25 문서 | ||||
|---|---|---|---|---|
| 스포츠 토토 사이트 |3_115 | PostgreSQL : 문서 : 9.3 : 사설 토토 시스템 | 제38장. 규칙 시스템 | 브라운 |3_m |2사설 토토 사이트 색 | | |
롤 토토된 보기포스트그레SQL뷰와 같은 규칙 시스템을 사용합니다. 그러나 결과를 테이블과 같은 형식으로 유지합니다. 주요 차이점 사이:
MATERIALIZED VIEW mymatview AS SELECT * FROM mytab 생성;
그리고:
CREATE TABLE mymatview AS SELECT * FROM mytab;
롤 토토된 뷰는 이후에 직접적으로 생성될 수 없습니다. 업데이트되었으며 롤 토토된 뷰를 생성하는 데 사용된 쿼리가 뷰의 쿼리가 저장되는 것과 똑같은 방식으로 저장되므로 롤 토토된 뷰에 대해 새로운 데이터가 생성될 수 있음 와 함께:
구현된 보기 새로고침 mymatview;
구체화된 뷰에 대한 정보는포스트그레SQL시스템 카탈로그는 정확히 동일합니다 테이블이나 뷰의 경우와 마찬가지입니다. 따라서 파서의 경우 롤 토토된 뷰는 테이블이나 뷰와 마찬가지로 관계입니다. 언제 롤 토토된 뷰가 쿼리에서 참조되면 데이터가 반환됩니다. 테이블과 같이 롤 토토된 뷰에서 직접; 규칙은 롤 토토된 뷰를 채우는 데에만 사용됩니다.
구체화된 뷰에 저장된 데이터에 대한 액세스는 종종 기본 테이블에 직접 액세스하는 것보다 훨씬 빠릅니다. 뷰를 통해 데이터가 항상 최신인 것은 아닙니다. 그래도 가끔 현재 데이터는 필요하지 않습니다. 기록하는 테이블을 고려하십시오. 매출:
테이블 송장 생성(
voice_no 정수 기본 키,
Seller_no 정수, -- 영업사원의 ID
송장_날짜 날짜, -- 판매 날짜
voice_amt 숫자(13,2) -- 판매 금액
);
사람들이 과거 판매 내역을 빠르게 그래프로 표시할 수 있기를 원하는 경우 데이터를 요약하고 싶을 수도 있지만 데이터에는 관심이 없을 수도 있습니다. 현재 날짜에 대한 불완전한 데이터:
CREATE MATERIALIZED VIEW sales_summary AS
선택
판매자_아니요,
송장_날짜,
sum(invoice_amt)::numeric(13,2) as sales_amt
송장에서
WHERE 인보이스_날짜 < CURRENT_DATE
그룹 기준
판매자_아니요,
송장_날짜
주문 방법
판매자_아니요,
송장_날짜;
고유 인덱스 생성 sales_summary_seller
ON sales_summary (판매자_번호, 송장_날짜);
이 구체화된 뷰는 그래프를 표시하는 데 유용할 수 있습니다. 영업사원을 위해 만들어진 대시보드입니다. 작업은 다음과 같이 예약될 수 있습니다. 다음 SQL 문을 사용하여 매일 밤 통계를 업데이트합니다.
실현된 보기 새로고침 sales_summary;
구체화된 뷰의 또 다른 용도는 다음에 대한 더 빠른 액세스를 허용하는 것입니다. 외부 데이터를 통해 원격 시스템에서 가져온 데이터 래퍼. 를 사용한 간단한 예file_fdw아래에 타이밍이 있지만 로컬에서 캐시를 사용하고 있으므로 시스템은 외부 데이터 래퍼의 성능 차이를 원격 시스템이 더 커질 수 있습니다. 설정:
확장 파일 생성_fdw; 서버 생성 local_file 외부 데이터 래퍼 file_fdw; CREATE FOREIGN TABLE 단어(단어 텍스트 NOT NULL) 서버 local_file OPTIONS(파일 이름 '/etc/dictionaries-common/words'); MATERIALIZED VIEW wrd AS SELECT * FROM 단어 생성; 고유 인덱스 생성 wrd_word ON wrd(단어); 확장 프로그램 생성 pg_trgm; gist를 사용하여 wrd_trgm ON wrd 인덱스 생성(단어 gist_trgm_ops); 진공 분석 wrd;
이제 단어의 철자를 검사해 보겠습니다. 사용file_fdw직접:
SELECT count(*) FROM 단어 WHERE 단어 = 'caterpiler';
카운트
-------
0
(1행)
계획은 다음과 같습니다:
집계(비용=4125.19..4125.20 행=1 너비=0) (실제 시간=26.013..26.014 행=1 루프=1)
- 단어에 대한 외부 스캔(비용=0.00..4124.70 행=196 너비=0) (실제 시간=26.011..26.011 행=0 루프=1)
필터: (단어 = 'caterpiler'::text)
필터에 의해 제거된 행: 99171
외부 파일: /etc/dictionaries-common/words
외부 파일 크기: 938848
총 런타임: 26.081ms
대신 롤 토토된 뷰를 사용하면 쿼리가 훨씬 더 많아집니다. 더 빠르게:
집계(비용=4.44..4.45행=1 너비=0)(실제 시간=0.074..0.074행=1 루프=1)
- wrd에서 wrd_word를 사용하여 인덱스 전용 스캔(비용=0.42..4.44행=1 너비=0)(실제 시간=0.071..0.071행=0 루프=1)
색인 조건: (단어 = 'caterpiler'::text)
힙 페치: 0
총 런타임: 0.119ms
어쨌든 단어 철자가 틀렸으니 우리가 무엇을 찾아보자 싶었을 수도 있습니다. 다시 사용하여file_fdw:
단어에서 단어 선택 ORDER BY 단어 <- 'caterpiler' LIMIT 10;
단어
---------------
음식을 제공하다
애벌레
애벌레
애벌레
애벌레의
캐터필러의
출장요리사
케이터링
음식을 제공하다
음식을 제공한
(10행)
한도(비용=2195.70..2195.72 행=10 너비=32) (실제 시간=218.904..218.906 행=10 루프=1)
- 정렬(비용=2195.70..2237.61행=16765너비=32)(실제 시간=218.902..218.904행=10루프=1)
정렬 키: ((단어 <- 'caterpiler'::text))
정렬 방법: 상위 N 힙 정렬 메모리: 25kB
- 단어에 대한 외부 스캔(비용=0.00..1833.41 행=16765 너비=32) (실제 시간=0.046..200.965 행=99171 루프=1)
외부 파일: /etc/dictionaries-common/words
외부 파일 크기: 938848
총 런타임: 218.966ms
롤 토토된 뷰 사용:
한도(비용=0.28..1.02 행=10 너비=9) (실제 시간=24.916..25.079 행=10 루프=1)
- wrd에서 wrd_trgm을 사용한 인덱스 스캔(비용=0.28..7383.70행=99171너비=9)(실제 시간=24.914..25.076행=10루프=1)
정렬 기준: (단어 <- 'caterpiler'::text)
총 런타임: 25.884ms
당신이 원격 데이터의 주기적인 업데이트를 허용할 수 있다면 로컬 데이터베이스를 사용하면 성능상의 이점이 상당할 수 있습니다.
| 이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
| 뷰 및 규칙 시스템 | PostgreSQL : 문서 : 9.3 : 사설 토토 시스템 | 규칙삽입, 업데이트및삭제 |