토토 핫 된보기에서PostgreSQL보기와 마찬가지로 규칙 시스템을 사용하지만 결과를 테이블과 같은 형태로 유지하십시오. 다음의 주요 차이점 :
토토 핫 된 View MyMatView 생성 MyMatView를 선택 * From MyTab;
및 :
TABLE MYMATVIEW를 선택하여 * MyTab에서 *
토토 핫 된 뷰는 직접 업데이트 될 수 없으며, 토토 핫 된보기를 생성하는 데 사용되는 쿼리가 뷰의 쿼리가 저장되는 것과 동일한 방식으로 저장되므로 다음과 함께 토토 핫 된 뷰를 위해 신선한 데이터를 생성 할 수 있습니다.
새로 고침 토토 핫 된보기 mymatview;
PostgreSQL시스템 카탈로그는 테이블이나보기와 정확히 동일합니다. 따라서 파서의 경우, 구체화 된보기는 테이블이나보기와 같은 관계입니다. 구체화 된보기가 쿼리에서 참조되면, 데이터는 표에서와 같이 토토 핫 된보기에서 직접 반환됩니다. 규칙은 구체화 된보기를 채우는 데만 사용됩니다.
토토 핫 된보기에 저장된 데이터에 대한 액세스는 종종 기본 테이블에 직접 또는 뷰를 통해 액세스하는 것보다 훨씬 빠르지 만 데이터가 항상 최신 것은 아닙니다. 그러나 때로는 현재 데이터가 필요하지 않습니다. 판매를 기록하는 테이블을 고려하십시오 :
테이블 송장 생성 ( invoice_no 정수 기본 키, Seller_no Integer, - 영업 사원의 ID invoice_date 날짜 - 판매 날짜 invoice_amt 숫자 (13,2) - 판매량 );
사람들이 히스토리 판매 데이터를 빠르게 그래프로 그래프로 그래프로 만들 수 있기를 원한다면 요약하고 싶을 수도 있고 현재 날짜의 불완전한 데이터에 신경 쓰지 않을 수 있습니다..
토토 핫 된보기 생성 Sales_Summary as 선택하다 Seller_no, invoice_date, SALL (invoice_amt) :: 숫자 (13,2)로 sales_amt 송장에서 여기서 invoice_date <current_date 그룹에 의해 Seller_no, invoice_date; 고유 한 인덱스 판매 _summary_seller를 만듭니다 on sales_summary (seller_no, invoice_date);
이 토토 핫 된보기는 영업 사원을 위해 생성 된 대시 보드에 그래프를 표시하는 데 유용 할 수 있습니다. 이 SQL 문을 사용하여 매일 밤 통계를 업데이트 할 예정이 될 수 있습니다.
새로 고침 토토 핫 된보기 Sales_SUMMARY;
토토 핫 된보기의 또 다른 용도는 외국 데이터 래퍼를 통해 원격 시스템에서 가져온 데이터에 더 빠르게 액세스 할 수 있도록하는 것입니다. 사용한 간단한 예file_fdw
는 아래에 있으며 타이밍이 아래에 있지만 로컬 시스템의 캐시를 사용하기 때문에 원격 시스템에 대한 액세스와 비교하여 성능 차이가 일반적으로 여기에 표시되는 것보다 클 것입니다. 또한 우리는 또한 토토 핫 된 견해에 인덱스를 넣을 수있는 능력을 활용하고있는 반면file_fdw
지수를 지원하지 않습니다. 이 장점은 다른 종류의 외국 데이터 액세스에 적용되지 않을 수 있습니다.
설정 :
Extension file_fdw 만들기; Server local_file 이외의 데이터 래퍼 파일 _fdw를 만듭니다. 외국 테이블 단어 만들기 (단어 텍스트가 아님 null) Server local_file 옵션 (filename '/usr/share/dict/words'); 구체화 된보기 wrd를 선택하여 * Word에서 선택하십시오. WRD (Word)에서 고유 한 인덱스 WRD_WORD를 만듭니다. Extension PG_TRGM 작성; GIST (Word Gist_trgm_ops)를 사용하여 WRD에서 색인 WRD_TRGM을 만듭니다. 진공 분석 WRD;
이제 단어를 철판하자. 사용file_fdw
직접 :
Word = 'caterpiler'에서 단어에서 count (*)를 선택하십시오. 세다 ------- 0 (1 행)
with분석
, 우리는 다음을 본다 :
집계 (비용 = 21763.99..21764.00 행 = 1 너비 = 0) (실제 시간 = 188.180..188.181 줄 = 1.00 루프 = 1) - 단어에 대한 외국 스캔 (비용 = 0.00..21761.41 행 = 1032 너비 = 0) (실제 시간 = 188.177..188.177 행 = 0.00 루프 = 1) 필터 : (Word = 'CaterPiler':: 텍스트) 필터에 의해 제거 된 행 : 479829 외국 파일 :/usr/share/dict/words 외국 파일 크기 : 4953699 계획 시간 : 0.118ms 실행 시간 : 188.273 MS
토토 핫 된보기가 대신 사용되면 쿼리가 훨씬 빠릅니다.
집계 (비용 = 4.44..4.45 행 = 1 너비 = 0) (실제 시간 = 0.042..0.042 행 = 1.00 루프 = 1) - index wrd에서 wrd_word를 사용하여 스캔합니다 (비용 = 0.42..4.44 행 = 1 너비 = 0) (실제 시간 = 0.039..0.039 행 = 0.00 루프 = 1) 색인 조건 : (Word = 'CaterPiler':: Text) 힙을 가져옵니다 : 0 색인 검색 : 1 계획 시간 : 0.164 ms 실행 시간 : 0.117 ms
어느 쪽이든, 단어가 잘못되었으므로 우리가 원했던 것을 찾아 봅시다. 다시 사용file_fdw
andPG_TRGM
:
단어로 단어에서 단어를 선택하여 단어 <- 'Caterpiler'Limit 10; 단어 ----------------- 네 끗패 무한 궤도 무한 궤도 애벌레 애벌레 애벌레 케이터 취사자 수수료 음식을 제공합니다 (10 줄)
한계 (비용 = 11583.61..11583.64 행 = 10 너비 = 32) (실제 시간 = 1431.591..1431.594 줄 = 10.00 루프 = 1) - 정렬 (비용 = 11583.61..11804.76 행 = 88459 너비 = 32) (실제 시간 = 1431.589..1431.591 행 = 10.00 루프 = 1) 정렬 키 : ((word <- 'Caterpiler':: Text))) 정렬 방법 : Top-N Heapsort 메모리 : 25KB - 단어에 대한 외국 스캔 (비용 = 0.00..9672.05 줄 = 88459 너비 = 32) (실제 시간 = 0.057..1286.455 줄 = 479829.00 루프 = 1) 외국 파일 :/usr/share/dict/words 외국 파일 크기 : 4953699 계획 시간 : 0.128ms 실행 시간 : 1431.679 MS
토토 핫 된보기 사용 :
한계 (비용 = 0.29..1.06 행 = 10 너비 = 10) (실제 시간 = 187.222..188.257 행 = 10.00 루프 = 1) - WRD에서 WRD_TRGM을 사용한 인덱스 스캔 (비용 = 0.29..37020.87 행 = 479829 너비 = 10) (실제 시간 = 187.219..188.252 행 = 10.00 루프 = 1) 주문 : (Word <-- 'Caterpiler':: 텍스트) 색인 검색 : 1 계획 시간 : 0.196ms 실행 시간 : 198.640 ms
로컬 데이터베이스에 대한 원격 데이터의 정기적 인 업데이트를 견딜 수 있다면 성능 혜택이 상당 할 수 있습니다.