データベース システムでは、データベース オブジェクトとしてのマテリアライズド ビューは、クエリの事前計算された結果を物理テーブルとして保存します。データは実際にはディスクに保存されるため、複雑な検索をより迅速に取得できます。ただし、ビューはクエリを定義する仮想テーブルですが、実際にはデータを保持しません。ビューは、クエリを実行するたびに、基になるベース テーブルから最新の情報を取得します。リアルタイム データ アクセスと事前計算された結果は、マテリアライズド ビューと標準ビューのどちらを使用するかを決定する基準の一部です。
マテリアライズド ビューとは何ですか?
マテリアライズド ビューは、SQL クエリの結果をデータベースに物理的に保存します。格納されたデータは、指定された間隔 (手動、定期、または自動) で更新され、基礎となるベース テーブルの変更に合わせてビューを調整することができます。
マテリアライズド ビューはどのように機能するのでしょうか?
複数の地域ごとの売上データを要約する複雑な SQL クエリを実行するとします。レポートを生成する必要があるたびに複雑なクエリを実行する代わりに、結果の事前計算と保存を行うマテリアライズド ビューを作成します。ユーザーがレポートを表示したい場合、コンピュータ プログラムの実行中に中断することなく集計を再計算する必要はなく、マテリアライズド ビューから直接取得できます。
マテリアライズド ビューの一般的な使用例
- 集計の事前計算: マテリアライズド ビューはレポートと分析に最適です。集約データを事前計算して保存するため、時間のかかるクエリを何度も実行する必要がありません。
- 複雑な結合時の負荷の軽減: マテリアライズド ビューは、データベースに複数の複雑な結合が含まれている場合に、テーブルを結合し、クエリの実行中に結果を保存するために作成されます。
- 頻繁にアクセスされるデータのキャッシュ: マテリアライズド ビューは結果を保持するキャッシュとして機能するため、クエリのパフォーマンスが向上し、ベース テーブルの負荷が軽減されます。
ビューとは何ですか?
ビューは、データ自体を格納しない仮想テーブルです。最新の結果を形成するためにビューにアクセスするたびに、クエリはベース テーブルに対して何度も実行されます。
ビューの仕組み?
さまざまな地域の顧客情報を保持するベース テーブルが多数あるとします。統合された顧客データを表示する必要があるたびに複雑な SQL クエリを作成するのではなく、ビューを作成します。次に、ビューにクエリを実行すると、その場でベース テーブルを結合することによってデータが取得および表示されます。
ビューの一般的な使用例
- 複雑なクエリの簡素化: View は、複雑な一連の結合とフィルターを 1 つの仮想テーブルにカプセル化して、エンドユーザーがデータに簡単にアクセスできるようにします。
- セキュリティの強化: 特定の列または行のみを表示するビューを定義すると、基礎となるデータを非表示に維持することで、機密データへのアクセスに関する知識を制限できます。
- 抽象化レイヤーの作成: ビューを使用すると、複数のテーブルに抽象化レイヤーを提供できるため、生のベース テーブルを妨げることなく、データの理解と管理がはるかに容易になります。
マテリアライズド ビューとビューの長所と短所
マテリアライズド ビューとビューのどちらを選択するかには、妥協点を理解する必要があります。以下に、各アプローチの長所と短所を詳しく示します。
マテリアライズド ビューの長所と短所
| 側面 | 長所 | 短所 |
| パフォーマンス | 事前計算された結果を保持することでパフォーマンスを向上させます | 更新されないと古くなります |
| スピード | 複雑なクエリに費やす時間を削減します | ビューを維持するには、より多くのストレージが必要です |
| 鮮度 | 定期的に更新できます | 更新しない限り、データは常に最新であるとは限りません |
| リソースの使用量 | 反復的なクエリの場合、CPU とメモリの使用量が少なくなります | 維持と保管のために追加のリソースが必要です |
| 柔軟性 | 分析やレポート作成などの場合に有益 | 新しいデータを必要とするリアルタイム アプリケーションには最適なオプションではありません |
| メンテナンス | 自動的に更新可能 (増分または完全) | 巨大なデータベースの場合、更新にはコストがかかる場合があります |
| 複雑なクエリ | エンドユーザーが複雑なクエリを理解するのに役立ちます | 基礎となるテーブルを更新するためにビューを更新する必要があります |
| 同時実行性 | 結果をキャッシュすることにより、データベースの負荷が軽減されます。 | データベースのパフォーマンスは高いリフレッシュ レートの影響を受けます |
ビューの長所と短所
| 側面 | 長所 | 短所 |
| パフォーマンス | データアクセスを簡素化するのに役立ちます | クエリに複数の結合が含まれる場合や集計が遅くなる場合 |
| スピード | 最新情報を含むリアルタイムデータへの遅延のないアクセス | 特にビューが複雑な場合、クエリが遅くなります |
| 鮮度 | 基になるテーブルを常に最新の状態に保つ | 複雑なクエリではパフォーマンスの低下につながる可能性があります |
| リソースの使用量 | クエリの定義のみを保持するため、それ以上のストレージは必要ありません。 | すべての実行クエリで結果が再計算されます。 |
| 柔軟性 | クエリでは通常のテーブルとして扱うことができます | パフォーマンス重視の分析には適していません |
| メンテナンス | リアルタイムデータを自動的に取得するため、更新は必要ありません | 大規模なデータセットを使用して頻繁にアクセスすると、パフォーマンスが低下する可能性があります |
| 複雑なクエリ | 構造化された抽象化を提供することで、クエリ ロジックでの作業が容易になります。 | 事前に計算された結果はマテリアライズド ビューのように保存できません |
| 同時実行性 | 基になるテーブルの変更を常にリアルタイムで表示します | 負荷が大きいとデータベースに余分な負担がかかる可能性があります |
ビューとマテリアライズド ビューの主な違い
最新のアプリケーションはバックボーンとしてデータベースに依存しており、データの制御はマテリアライズド ビューとビューという 2 つの主要なツールによって実現されます。これらは主にデータ アクセスを簡素化し、クエリのパフォーマンスを最適化するために存在しますが、その目的は異なります。マテリアライズド ビューとビューのいくつかの特徴を次に示します。
ストレージ
- マテリアライズド ビュー: 実際のデータをデータベースに保存します。
- ビュー: データを保存しません。 クエリ定義のみを保存します。
クエリの実行
- マテリアライズド ビュー: 事前計算されたデータがフェッチされるため、クエリのパフォーマンスが向上します。
- ビュー: クエリの実行はアクセスごとに開始されます。
データの鮮度
- マテリアライズド ビュー: データは明示的に更新しない限り、古くなってしまう可能性があります。
- ビュー: 基になるテーブルから常に最新のデータをフェッチします。
パフォーマンス
- マテリアライズド ビュー: 以前に計算されたデータが保存されているため、高速になります。
- ビュー: クエリが複雑な場合、オンデマンドなので処理が遅くなる可能性があります。
リフレッシュの仕組み
- マテリアライズド ビュー: コンテンツを更新するには、手動またはスケジュールされた更新が必要です。
- ビュー: リアルタイム データは常にフェッチされるため、更新は必要ありません。
ストレージ要件
- マテリアライズド ビュー: 事前計算された結果を維持するために追加のストレージが必要です。
- ビュー: クエリ メタデータを除き、基本的にストレージを使用しません。
使用例
- マテリアライズド ビュー: レポート、分析、パフォーマンスを重視するクエリに適しています。
- ビュー: ほぼリアルタイムのデータが必須の場合のオプションです。
複雑
- マテリアライズド ビュー: メンテナンスとリフレッシュ管理が必要。
- ビュー: セットアップと使用は簡単ですが、リソースを大量に消費する可能性があります。
マテリアライズド ビューとビューをいつ使用するか
マテリアライズド ビューは次の場合に使用します。
マテリアライズド ビューは、クエリのパフォーマンスを何としてでも改善する必要がある場合、特にそのようなクエリで大量の集計、結合、または処理操作による結果を返す前に多くの計算が必要な場合に使用します。これは、事前計算された結果によって、データベースにかかる負荷やクエリが結果を返す速度に大きな違いが生じる場合に特に役立ちます。マテリアライズド ビューは、最新の更新データを取得するために定期的に更新する必要がありますが、リアルタイムのデータ アクセスはそれほど重要ではないが、高速な実行が依然として重要であるレポートおよび分析シナリオでの目的を果たします。
次の場合にビューを使用します。
クエリで常に最新のデータをフェッチする必要があるビューを使用します。この場合、データ アクセスはリアルタイムである必要があり、クエリの複雑さを管理できます。また、ビューはデータをデータベースに物理的に保存しないため、必要なストレージが少なくなることに留意してください。ただし、非常に複雑なクエリの場合、ビューを何度も実行するとシステムの速度が低下する可能性があることに注意してください。
結論
マテリアライズド ビューが通常のビューとどのように異なるかは、データベースのパフォーマンスをチューニングする際の重要な概念です。マテリアライズド ビューは、事前計算された結果を保存して、負荷の高い操作のクエリを高速化するビューです。ただし、適切なタイミングで更新しないと古くなってしまう可能性があるため、メンテナンスが面倒になることがあります。逆に、リアルタイムの精度を維持するために、基になるベース テーブルからの変更に応じてビューが更新されますが、パフォーマンスが多少低下する可能性があります。
どちらを選択するかを決める際には、データベースのワークロード、クエリの複雑さ、リアルタイム データの重要性を考慮してください。パフォーマンスが優先されるレポートや分析の場合、マテリアライズド ビューが有力な候補となります。対照的に、最新のデータが重要なシナリオでは、通常のビューが望ましいです。
最終的な決定は、使用されているデータベース システムによっても異なる場合があります。さまざまなデータベース システム。 PostgreSQL, オラクル、 そして MySQL さまざまなレベルのマテリアライズド ビューのサポートと機能を備えています。