ふりかえり

本記事は、SQLの基本、実務使用例編になります。
SQLの基礎に関しましては、
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

本編に入ります!
そもそも「ビュー」とは?
複雑な SELECT 文を、まるでテーブルのように使えるものです。
create view 売上ビュー as
select 商品名, sum(金額) as 合計金額
from 売上
group by 商品名;
実際のデータは保存されません。
ビューを参照するたびに、元のテーブルからデータを取りに行きます。
マテリアライズドビューとは?
「中身が保存されているビュー」のことです。
通常のビュー → データは保存しない
マテリアライズドビュー → データを保存する(キャッシュのようなもの)
たとえばお店の売上集計で…

毎日集計する売上ランキングを考えてみましょう。
例えば100万件ある「売上テーブル」から GROUP BY で毎回集計すると遅いですよね?
そこで、マテリアライズドビューを使って効率よくデータをとっていきます!
create materialized view 売上集計ビュー as
select 商品名, sum(金額) as 合計金額
from 売上
group by 商品名;
これを作ると、結果が保存されたテーブルのようになります!
次からは、高速に集計済みデータを使えます!
リフレッシュ(更新)のタイミング
マテリアライズドビューは、更新しないと古いデータのままになります。
更新(リフレッシュ)には2種類あります:
| 種類 | 意味 |
|---|---|
ON DEMAND | 手動で更新(ユーザーが更新を命令する) |
ON COMMIT | 元テーブルに変更があるたびに自動で更新 |
ON SCHEDULE | 毎日0時など、スケジュールで自動更新 |
メリットとデメリット
| メリット | デメリット |
|---|---|
| 集計結果が速い | 更新が手間になる |
| 重いSQLの負荷を減らせる | データが古くなることがある |
| キャッシュのように使える | ディスク容量を使う |
ビューとマテリアライズドビューの特徴について
| 用語 | 特徴 |
|---|---|
| ビュー | 毎回元テーブルからデータを参照。軽いが遅い |
| マテリアライズドビュー | 結果を保存。速いが更新が必要 |
実務レベルの使用例を見ていこう!

実際に、SQLを使用してデータを確認していきましょう。
SQLに関しては以下を使用して解説していきます。
create table文、select文、insert文、update文、delete文、
drop table文、につきましては、過去にアップロードした
【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

目次の、「ふりかえり」のところにそれぞれの記事のリンクが
貼ってあるよ!
または、サイドバーのカテゴリーにSQLがあるから、そちらからでも
参照できます!
Oracle Live SQLで実行していきます!
今回、実行するSQLの一覧
売上テーブル の作成(CREATE TABLE)
create table 売上データ (
売上ID number primary key,
商品カテゴリ varchar2(50),
金額 number,
売上日付 date
);
データを追加(INSERT)
insert into 売上データ values (1, '飲料', 150, to_date('2024-06-01', 'yyyy-mm-dd'));
insert into 売上データ values (2, '食品', 300, to_date('2024-06-01', 'yyyy-mm-dd'));
insert into 売上データ values (3, '飲料', 200, to_date('2024-06-02', 'yyyy-mm-dd'));
insert into 売上データ values (4, '日用品', 400, to_date('2024-06-03', 'yyyy-mm-dd'));
insert into 売上データ values (5, '食品', 250, to_date('2024-06-03', 'yyyy-mm-dd'));
マテリアライズドビューの作成(CREATE MATERIALIZED VIEW)
create materialized view 売上集計ビュー
refresh on demand
as
select 商品カテゴリ, sum(金額) as 合計金額
from 売上データ
group by 商品カテゴリ;
集計結果を確認する(SELECT)
select * from 売上集計ビュー;

データを追加する
insert into 売上データ values (6, '飲料', 250, to_date('2024-06-03', 'yyyy-mm-dd'));
リフレッシュ(更新)する(DBMS_MVIEW.REFRESH)
データを追加・変更した後、マテリアライズドビューを更新するには以下を実行
begin
dbms_mview.refresh('売上集計ビュー');
end;
更新されたかどうか、再度集計結果を確認する(SELECT)
select * from 売上集計ビュー;

まとめ

マテリアライズドビューについて解説しました。
次回もお楽しみに!










コメント