2010-03-28 23 views
19

Cách triển khai Chế độ xem được xem hóa?Làm cách nào để triển khai Chế độ xem Vật hoá với MySQL?

Nếu không, làm cách nào tôi có thể triển khai Chế độ xem vật chất với MySQL?

Cập nhật:

Sẽ công việc sau đây? Điều này không xảy ra trong một giao dịch, đó có phải là một vấn đề không?

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

Hãy xem [Chế độ xem vật chất với MySQL] (http://www.fromdual.com/mysql-materialized-views) –

Trả lời

2

Ví dụ của bạn gần giống với chế độ xem được "làm mới đầy đủ". Bạn có thể cần chế độ xem "làm mới nhanh", thường được sử dụng trong cài đặt kho dữ liệu, nếu các bảng nguồn bao gồm hàng triệu hoặc hàng tỷ hàng.

Bạn sẽ gần đúng việc làm mới nhanh bằng cách sử dụng chèn/cập nhật (upsert) tham gia "bảng xem" hiện có so với khóa chính của chế độ xem nguồn (giả sử chúng có thể được giữ nguyên) hoặc giữ ngày_time của lần cập nhật cuối cùng và sử dụng điều đó trong tiêu chí của SQL làm mới để giảm thời gian làm mới.

Ngoài ra, hãy xem xét sử dụng đổi tên bảng, thay vì thả/tạo, do đó, chế độ xem mới có thể được tạo và đặt đúng vị trí gần như không có khoảng trống không có sẵn. Xây dựng một bảng mới 'mview_new' đầu tiên, sau đó đổi tên 'mview' thành 'mview_old' (hoặc thả nó), và đổi tên 'mview_new' thành 'mview'. Trong ví dụ trên, chế độ xem của bạn sẽ không khả dụng khi số lượng SQL của bạn đang chạy.

30

Tôi duy trì một dự án có tên là Flexviews (http://github.com/greenlion/swanhart-tools), bổ sung thêm các khung nhìn vật lý có thể làm mới lại cho MySQL (còn gọi là làm mới nhanh), ngay cả đối với các chế độ xem sử dụng kết hợp và tổng hợp. Tôi đã làm việc trong dự án này trong ba năm. Nó bao gồm một tiện ích thay đổi dữ liệu chụp để đọc các bản ghi cơ sở dữ liệu. Không có trình kích hoạt nào được sử dụng.

Nó bao gồm hai phương pháp làm mới. Việc đầu tiên là tương tự như phương pháp của bạn, ngoại trừ một phiên bản mới được xây dựng, và sau đó RENAME TABLE được sử dụng để trao đổi mới cho cũ. Không có điểm nào là chế độ xem không khả dụng cho truy vấn, nhưng 2x không gian được sử dụng trong một thời gian ngắn.

Phương pháp thứ hai là đúng "làm mới nhanh", thậm chí nó còn hỗ trợ tổng hợp và tham gia.

Có một bài viết trên blog về nó: http://www.mysqlperformanceblog.com/2011/04/04/flexviews-part-3-improving-query-performance-using-materialized-views/

Flexviews là đáng kể tiến bộ hơn ví dụ FromDual tham chiếu bởi astander.

+0

nhưng công cụ swanhart không hỗ trợ java? –

+0

FlexCDC yêu cầu PHP 5.3+. Nó là một công cụ bên ngoài thu thập các bản ghi nhị phân. Phần còn lại của Flexviews được xây dựng từ các thường trình được lưu trữ (các chương trình sống và chạy trong cơ sở dữ liệu). Không có lý do gì mà bạn không thể tạo/truy cập vào các khung nhìn Flexized được thực hiện nếu bạn đang sử dụng JDBC, vì JDBC kết nối với MySQL và bạn tạo/xem/duy trì các khung nhìn thông qua giao diện SQL. –

0

Theo số mySQL docs and comments at the bottom of the page, có vẻ như mọi người đang tạo chế độ xem, sau đó tạo bảng từ các chế độ xem đó. Không chắc chắn nếu giải pháp này là tương đương với việc tạo ra một cái nhìn vật hoá, nhưng nó có vẻ là con đường duy nhất có sẵn tại thời điểm này.

Các vấn đề liên quan