Làm mới Materialized View trong SQL
Dữ liệu trong materialized view có thể được làm mới để cập nhật theo các bảng nền. Lựa chọn phương thức làm mới phụ thuộc vào yêu cầu nghiệp vụ và cân nhắc hiệu năng của từng hệ cơ sở dữ liệu. Hãy cùng xem các phương thức làm mới của materialized view dưới đây.
Làm mới thủ công
Với làm mới thủ công, materialized view chỉ được làm mới khi người dùng chủ động yêu cầu. Cách này cho phép kiểm soát tối đa thời điểm cập nhật dữ liệu, phù hợp khi dữ liệu ít thay đổi hoặc cập nhật vào giờ thấp điểm.
Truy vấn sau minh họa cách làm mới thủ công trong PostgreSQL.
REFRESH MATERIALIZED VIEW sales_summary;
Làm mới định kỳ
Materialized view được tự động làm mới ở các khoảng thời gian định sẵn, đảm bảo dữ liệu được cập nhật mà không cần can thiệp của người dùng. Cách này hữu ích cho các ứng dụng nhạy thời gian cần dữ liệu tương đối mới.
Ví dụ dưới đây cho thấy cách thiết lập làm mới định kỳ trong Oracle bằng cách định nghĩa lịch làm mới trực tiếp trong câu lệnh CREATE MATERIALIZED VIEW. Thời gian làm mới được đặt theo chu kỳ hàng giờ.
-- Create a materialized view to aggregate sales data
-- Set to refresh completely every hour
CREATE MATERIALIZED VIEW sales_summary
REFRESH COMPLETE START WITH (SYSDATE) NEXT (SYSDATE + 1/24)
AS
SELECT product_id,
SUM(quantity) AS total_quantity,
SUM(price * quantity) AS total_revenue
FROM sales
GROUP BY product_id;
Làm mới theo yêu cầu
Làm mới theo yêu cầu xảy ra mỗi khi dữ liệu nền thay đổi, thường thông qua cơ chế trigger. Cách này đảm bảo materialized view luôn chứa dữ liệu đã cập nhật. Ví dụ, trong PostgreSQL, có thể thiết lập trigger để làm mới view khi có thay đổi ở bảng nền.
Làm mới toàn phần so với tăng dần
Bạn có thể làm mới dữ liệu toàn phần hoặc theo kiểu tăng dần trong materialized view. Bảng sau tóm tắt hai phương thức và tình huống sử dụng.
| Loại làm mới | Mô tả | Ưu điểm | Nhược điểm |
|---|---|---|---|
| Làm mới toàn phần | Nạp lại toàn bộ tập dữ liệu, thay thế mọi dữ liệu hiện có trong view | - Dễ triển khai - Xây dựng lại toàn bộ view | - Tốn nhiều tài nguyên với tập dữ liệu lớn - Thời gian làm mới lâu hơn |
| Làm mới tăng dần | Chỉ cập nhật các phần dữ liệu thay đổi trong view | - Hiệu quả hơn, chỉ xử lý dữ liệu đã thay đổi - Phù hợp với tập dữ liệu lớn, thay đổi thường xuyên | - Cần thiết lập bổ sung (ví dụ: log theo dõi thay đổi) - Không phải lúc nào cũng được hỗ trợ cho mọi truy vấn |
Thực hành tốt nhất cho Materialized View
Khi sử dụng materialized view, cần cân nhắc các thực hành sau để tối ưu.
- Chọn đúng truy vấn để materialize: Materialize các truy vấn phức tạp, tốn tài nguyên như join, tổng hợp và truy vấn lồng. Những truy vấn này hưởng lợi từ kết quả tính trước, giảm tải cho cơ sở dữ liệu.
- Cân bằng giữa độ mới của dữ liệu và hiệu năng: Tùy trường hợp sử dụng, chọn chiến lược làm mới phù hợp như thủ công, định kỳ hoặc theo yêu cầu. Dùng làm mới tăng dần để giảm tải tính toán và theo dõi tần suất thay đổi dữ liệu để quyết định chu kỳ làm mới.
- Dùng materialized view để tối ưu khối lượng công việc nặng truy vấn: Tận dụng materialized view cho báo cáo BI và dashboard nơi thời gian phản hồi nhanh là thiết yếu. Bạn cũng có thể đánh chỉ mục các cột dùng trong materialized view để lọc và sắp xếp nhanh hơn.
Materialized View trong các hệ quản trị cơ sở dữ liệu khác nhau
Như bạn đã thấy, các hệ quản trị cơ sở dữ liệu cung cấp mức hỗ trợ khác nhau cho materialized view. Bảng sau tóm tắt các tính năng và hạn chế riêng của materialized view trong các hệ này.
| Hệ cơ sở dữ liệu | Phương thức làm mới | Làm mới tăng dần | Tự động làm mới | Tính năng/Hạn chế đặc thù |
|---|---|---|---|---|
| PostgreSQL | Thủ công (REFRESH MATERIALIZED VIEW) | Không | Không | Thiếu làm mới tăng dần gốc. Cần lập lịch thủ công. |
| SQL Server | Tự động (Indexed Views) | Có (Đồng bộ tự động) | Có |
Yêu cầu |
| Oracle | Thủ công, On Commit, Lập lịch | Có (Fast Refresh) | Có | Hỗ trợ làm mới nhanh, phân vùng và song song. Cần view log. |
| Amazon Redshift | Thủ công, Lập lịch | Có | Có | Hỗ trợ dữ liệu phân tán theo hash hoặc round-robin. |
| MySQL | Không hỗ trợ gốc | Không | Không | Cần giải pháp thay thế (ví dụ: bảng tạm, công cụ bên thứ ba). |
| Azure Synapse | Thủ công, Lập lịch | Có | Có | Cho phép các chiến lược phân phối khác nhau để tối ưu. |
Nếu bạn dùng SQL Server làm hệ cơ sở dữ liệu chính, tôi khuyến nghị học khóa Introduction to SQL Server của DataCamp để nắm vững nền tảng Microsoft SQL Server cho phân tích dữ liệu. Ngoài ra, hãy xem lộ trình nghề nghiệp SQL Server Developer để hiểu cách tối ưu truy vấn và xử lý sự cố trong SQL Server.
Những điều cần cân nhắc thêm
Dù materialized view trong SQL hữu ích cho tối ưu truy vấn, chúng cũng đi kèm thách thức và hạn chế. Dưới đây là các vấn đề thường gặp và cách xử lý.
- Chi phí lưu trữ: Materialized view lưu trữ vật lý kết quả truy vấn trên đĩa, làm tăng nhu cầu lưu trữ. Để tránh tốn dung lượng không cần thiết, chỉ materialize các truy vấn tốn tài nguyên và phân vùng materialized view cho tập dữ liệu lớn.
- Chi phí cập nhật và gánh nặng làm mới: Giữ materialized view đồng bộ với bảng nền có thể tốn tài nguyên, đặc biệt với view cần cập nhật thường xuyên hoặc liên quan các tính toán phức tạp. Để giảm gánh nặng làm mới, hãy dùng làm mới tăng dần nếu được hỗ trợ hoặc đặt chu kỳ làm mới phù hợp vào thời điểm hệ thống ít sử dụng.
- Tính nhất quán và đồng bộ dữ liệu: Materialized view có thể lỗi thời nếu dữ liệu nền thay đổi thường xuyên, dẫn đến dữ liệu cũ. Để tránh, hãy chọn chiến lược làm mới phù hợp và theo dõi thay đổi dữ liệu để điều chỉnh khi cần.
- Gánh nặng bảo trì: Materialized view cần bảo trì liên tục, như đặt lịch làm mới phù hợp, theo dõi sử dụng lưu trữ và quản lý phụ thuộc vào các bảng nền. Để khắc phục, luôn dùng lịch làm mới tự động, theo dõi hiệu năng hệ thống và thiết lập cảnh báo khi làm mới thất bại.
Kết luận
Materialized view hữu ích trong các cơ sở dữ liệu SQL để tối ưu hiệu năng truy vấn. Chúng lưu trữ vật lý kết quả truy vấn trên đĩa, mang lại tốc độ truy vấn nhanh hơn nhờ giảm tính toán lại. Tính năng này giúp materialized view phù hợp để xử lý các truy vấn phức tạp, tốn tài nguyên có join, tổng hợp và tập dữ liệu lớn. Hiểu cách triển khai materialized view trong các hệ cơ sở dữ liệu khác nhau sẽ giúp bạn nâng cao kỹ năng tối ưu truy vấn và cơ sở dữ liệu.
Nếu bạn muốn nâng cao kỹ năng SQL, tôi khuyến nghị thử lộ trình nghề nghiệp Associate Data Analyst in SQL của DataCamp để trở thành một nhà phân tích dữ liệu thành thạo. Khóa học Reporting in SQL cũng sẽ giúp bạn thành thạo xây dựng báo cáo và dashboard phức tạp để trình bày dữ liệu hiệu quả. Cuối cùng, bạn nên lấy SQL Associate Certification để chứng minh năng lực dùng SQL giải quyết bài toán kinh doanh và nổi bật giữa các chuyên gia khác.

Câu hỏi thường gặp
Materialized view trong SQL là gì?
Materialized view là một đối tượng cơ sở dữ liệu lưu trữ vật lý kết quả của một truy vấn, tối ưu hiệu năng bằng cách tránh tính toán lại.
Materialized view khác gì so với view thông thường?
Khác với view thông thường truy xuất dữ liệu động mỗi lần truy cập, materialized view lưu dữ liệu như các bảng vật lý, cho phép thực thi truy vấn nhanh hơn.
Sự khác nhau giữa làm mới toàn phần và tăng dần là gì?
Làm mới toàn phần tính toán lại toàn bộ view, trong khi làm mới tăng dần chỉ cập nhật dữ liệu đã thay đổi, giúp tăng hiệu quả.
Những cơ sở dữ liệu nào hỗ trợ materialized view?
PostgreSQL, SQL Server (indexed views), Oracle, Amazon Redshift và Azure Synapse Analytics hỗ trợ materialized view, mỗi hệ có đặc điểm và hạn chế khác nhau, trong khi MySQL không hỗ trợ gốc.
Materialized view có tiêu tốn thêm dung lượng lưu trữ không?
Có, vì lưu trữ dữ liệu vật lý nên materialized view làm tăng nhu cầu lưu trữ.
Materialized view là một tính năng mạnh mẽ trong các hệ quản trị cơ sở dữ liệu SQL, giúp tối ưu hiệu năng truy vấn bằng cách lưu trữ vật lý kết quả của một truy vấn trên đĩa, từ đó tăng tốc độ truy vấn nhờ giảm việc tính toán lại. Điều này đặc biệt hữu ích khi xử lý các truy vấn phức tạp, tốn tài nguyên, bao gồm join, tổng hợp và các tập dữ liệu lớn.
Trước khi bắt đầu, tôi khuyến nghị bạn học khóa Introduction to SQL và lộ trình kỹ năng SQL Fundamentals trên DataCamp để nắm vững các kiến thức cơ bản về SQL và cách trích xuất dữ liệu bằng truy vấn. Tờ SQL Basics Cheat Sheet cũng sẽ là tài liệu hữu ích cho các hàm SQL thường dùng trong lọc và tổng hợp dữ liệu.
SQL Materialized View là gì?
Materialized view là một loại đối tượng đặc biệt trong cơ sở dữ liệu, lưu trữ vật lý kết quả của một truy vấn thay vì tính toán theo thời gian thực như view thông thường. Trong khi view thông thường là một câu truy vấn SQL được lưu lại và tạo kết quả động mỗi lần được gọi, materialized view sẽ tính trước và lưu dữ liệu theo cấu trúc giống bảng.
Bằng cách lưu bộ kết quả trên đĩa, materialized view có thể giảm đáng kể tải cho cơ sở dữ liệu, cải thiện hiệu năng truy vấn và hợp lý hóa việc xử lý các phép tính nặng.
Tạo Materialized View trong SQL
Quy trình tạo materialized view sử dụng cú pháp
CREATE MATERIALIZED VIEW, có khác biệt đôi chút giữa các hệ quản trị SQL. Các phương pháp sau minh họa cách tạo materialized view trong SQL Server, PostgreSQL và Oracle.Materialized view trong PostgreSQL
Trong PostgreSQL, bạn có thể tạo materialized view bằng cú pháp sau. Ví dụ này tạo một materialized view tên
sales_summaryđể tổng hợp tổng số lượng và doanh thu của từng sản phẩm.Materialized view trong SQL Server
Trong SQL Server, materialized view được gọi là "Indexed Views." Các bảng nền phải đáp ứng những yêu cầu cụ thể để tạo indexed view, chẳng hạn bật tùy chọn
WITH SCHEMABINDING.Tùy chọn
WITH SCHEMABINDINGđảm bảo lược đồ không thể thay đổi khi indexed view đang tồn tại. Cần tạo một unique clustered index để view có thể được materialized.Nếu bạn muốn tìm hiểu thêm về SQL Server, tôi khuyến nghị xem lộ trình kỹ năng SQL Server Fundamentals để làm quen với các kỹ năng SQL phục vụ phân tích dữ liệu.
Materialized view trong Oracle
Cú pháp tạo materialized view trong Oracle tương tự như PostgreSQL. Chúng ta cũng có thể chỉ định tùy chọn làm mới, như
ON DEMANDhoặcON COMMIT.Materialized view trong cơ sở dữ liệu phân tán
Materialized view cũng có thể chỉ định phương thức phân phối dữ liệu để đạt hiệu năng tốt hơn đối với các hệ như Azure Synapse hoặc Amazon Redshift hỗ trợ kho dữ liệu phân tán.
Hash Distribution cho Amazon Redshift
Truy vấn dưới đây tạo một materialized view tên
sales_summaryđể tổng hợp tổng số lượng và doanh thu theoproduct_id. Tùy chọnDISTSTYLE KEYvàDISTKEY(product_id)đảm bảo dữ liệu được phân phối trên các nút dựa trênproduct_id, cải thiện hiệu năng cho các truy vấn join theo cột này.Round-Robin Distribution cho Azure Synapse
Truy vấn này tạo một materialized view tên
sales_summaryđể tổng hợp tổng số lượng và doanh thu theoproduct_id. Phân phốiROUND_ROBINtrải đều dữ liệu qua các nút, hữu ích cho các tình huống không phụ thuộc nhiều vào join.