【初学者必見!】SQLの基本、実務使用例を徹底解説!マテリアライズドビュー編

【初学者必見!】SQLの基本、実務使用例を徹底解説!マテリアライズドビュー編 SQL

※この記事にはプロモーションが含まれています。

ふりかえり

筆者
筆者

本記事は、SQLの基本、実務使用例編になります。

SQLの基礎に関しましては、

【初学者必見!】SQLの超基礎編の記事をご覧くださいませ。

A子
A子

本編に入ります!

そもそも「ビュー」とは?

複雑な 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の超基礎編の記事をご覧くださいませ。

A子
A子

目次の、「ふりかえり」のところにそれぞれの記事のリンクが

貼ってあるよ!

または、サイドバーのカテゴリーに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 売上集計ビュー;

まとめ

筆者
筆者

マテリアライズドビューについて解説しました。

次回もお楽しみに!

この記事を書いた人
たくたく

文系出身・3年目のWeb系エンジニアです。
C#とSQLを得意としています。
同棲生活は2年目に入り、日々仲良く楽しく暮らしています。
プライベートではバイクや車で旅行に行くことが趣味です。
サンリオ好きで、中でもシナモン推しです。
お酒好きとして毎週の晩酌をリラックスタイムにしています。

たくたくをフォローする
SQLエンジニア
シェアする

コメント

タイトルとURLをコピーしました