2010-03-28 4 views
19

구체화 된보기를 구현하는 방법은 무엇입니까?MySQL과 함께 Materialized View를 구현하는 방법은 무엇입니까?

그렇지 않은 경우 어떻게 MySQL로 Materialized View를 구현할 수 있습니까?

업데이트 :

겠습니까 다음 작업? 이것은 거래에서 발생하지 않습니다. 문제입니까?

DROP TABLE IF EXISTS `myDatabase`.`myMaterializedView`; 
CREATE TABLE `myDatabase`.`myMaterializedView` SELECT * from `myDatabase`.`myRegularView`; 
+2

[MySQL로 구체화 된보기] (http://www.fromdual.com/mysql-materialized-views) –

답변

2

이 예제는 "완전 새로 고침"구체화보기와 유사합니다. 원본 테이블에 수백만 또는 수십억 개의 행이 포함되어 있으면 데이터웨어 하우스 설정에서 자주 사용되는 "빠른 새로 고침"보기가 필요할 수 있습니다.

당신은 (그들이 보존 열쇠가 될 수 있습니다 가정) 또는 마지막 업데이트의 DATE_TIME을 유지하는 대신 소스 뷰의 기본 키에 대한 기존의 "보기 테이블"에 가입 삽입/업데이트 (upsert)를 사용하여 빠른 새로 고침을 대략 것

, 새로 고침 SQL의 기준에서이를 사용하여 새로 고침 시간을 줄입니다.

또한 drop/create보다는 테이블 이름 바꾸기를 사용하여 새보기를 빌드하고 사용할 수없는 틈이 거의없는 장소에 배치 할 수 있습니다. 새 테이블 'mview_new'를 먼저 만든 다음 'mview'의 이름을 'mview_old'(또는 드롭)로 변경하고 'mview_new'의 이름을 'mview'로 변경하십시오. 위의 샘플에서는 SQL 채우기가 실행되는 동안 뷰를 사용할 수 없습니다.

30

조인과 집계를 사용하는보기의 경우에도 증분 새로 고침 가능한 구체화 된보기를 MySQL에 추가하는 (빠른 새로 고침이라고도 함) Flexviews 프로젝트 (http://github.com/greenlion/swanhart-tools)를 유지 관리합니다. 저는이 프로젝트를 3 년간 진행해 왔습니다. 데이터베이스 로그를 읽는 변경 데이터 캡처 유틸리티가 포함되어 있습니다. 트리거는 사용되지 않습니다.

두 가지 새로 고침 방법이 포함되어 있습니다. 첫 번째 방법은 새 버전이 작성된다는 점을 제외하고는 메서드와 비슷하지만 RENAME TABLE은 이전 버전의 새 버전을 바꾸는 데 사용됩니다. 어떤 시점에서도 쿼리를 조회 할 수 없지만 짧은 시간 동안 2 배의 공간이 사용됩니다.

두 번째 방법은 사실 "빠른 새로 고침"이며, 집계 및 조인을 지원합니다.

그것에 대해 블로그 게시물이 있습니다 : http://www.mysqlperformanceblog.com/2011/04/04/flexviews-part-3-improving-query-performance-using-materialized-views/

Flexviews 크게 astander에 의해 참조 FromDual 예보다 더 고급입니다.

+0

을보십시오. 그러나 swanhart-tools는 java를 지원하지 않습니까? –

+0

FlexCDC에는 PHP 5.3 이상이 필요합니다. 이진 로그를 수집하는 외부 도구입니다. 나머지 Flexviews는 저장된 루틴 (데이터베이스에서 실행 및 실행되는 프로그램)으로 작성됩니다. JDBC를 사용하고 있다면 JDBC가 MySQL에 연결하고 SQL 인터페이스를 통해 뷰를 생성 /보기/유지하기 때문에 Flexviews 구체화 뷰를 생성/액세스 할 수 없다. –

0

mySQL docs and comments at the bottom of the page에 따르면, 사람들이보기를 만들고 그보기에서 표를 만드는 것처럼 보입니다. 이 솔루션이 구체화 된보기를 작성하는 것과 같은지 확실하지 않지만 현재로서는 사용할 수있는 유일한 방법 인 것 같습니다.

관련 문제