Join句でテーブルを結合するのと、create viewのFrom句でテーブルを複数取得しviewを作成するのではどちらが効率がいいですか?

boitumelo-0DJHJcpwN9Q-unsplash.jpg

質問

Join句でテーブルを結合するのと、create viewのFrom句でテーブルを複数取得しviewを作成するのではどちらが効率がいいですか?


解答

結論から言うと:

JOIN 句でテーブルを結合するのと、CREATE VIEWFROM 句で複数テーブルを参照するのは、基本的に効率は同じです
なぜなら、ビューは保存されたクエリ定義にすぎず、実行時にJOIN句が解釈されて実行されるからです。


✅ 詳しく解説

1. ビュー(CREATE VIEW)の正体

  • ビューは「実体を持たない仮想テーブル」。

  • SELECT 文の定義だけを保持しており、呼び出されるたびに中身のクエリが実行されます。

  • つまり、JOIN されたビューを使うということは、そのままJOINクエリを毎回書いているのと同じことです。


2. JOIN句とVIEWの違い

比較項目JOIN句で直接書くビュー経由でJOINする
実行効率高い(クエリ最適化される)同じ(中身はJOINなので本質的に同じ)
可読性複雑なクエリは読みにくくなる複雑なJOINを抽象化できて見やすい
柔軟性その場で変更できるビュー定義を変更する必要がある
保守性クエリが長くなりやすいよく使う結合はビュー化して使いやすくできる

3. ✅ 実行効率は「ビューの中身次第」

  • 単純ビュー(1対1の変換) → 最適化されてJOINと同等のパフォーマンス

  • 複雑ビュー(ネストが深い、集計があるなど) → 最適化が難しくなり、JOIN直接の方が速くなることもある


4. ✅ 例:JOIN句 vs ビュー

JOIN句で直接書く場合:

SELECT e.name, d.name AS departmentFROM employees eJOIN departments d ON e.department_id = d.id;

ビューを作成して使う場合:

CREATE VIEW employee_with_department ASSELECT e.name, d.name AS departmentFROM employees eJOIN departments d ON e.department_id = d.id;-- 使用時SELECT * FROM employee_with_department;

どちらも同じJOINクエリがバックで実行される


✅ まとめ:効率面では「同じ」、目的で使い分ける

目的手法
性能を追求(実行計画を把握したい)JOIN句を直接書く
クエリを再利用・簡潔にしたいビューを作成して使う
集計・複雑なロジックを整理したいビューでロジックを分離

✅ 補足:マテリアライズドビュー(PostgreSQLなど)

  • 通常のビューは都度実行されるが、

  • マテリアライズドビューは結果を**保存(キャッシュ)**しておけるため、重いJOINでも高速化できる

  • ただし、更新には REFRESH が必要



【中古】ALL IN ONEパーフェクトマスターデータベーススペシャリスト 2020年度版春 /TAC/TAC株式会社(情報処理講座)(単行本(ソフトカバー))

価格:819円
(2025/6/16 15:43時点)
感想(0件)


PostgreSQL徹底入門 第4版 インストールから機能・仕組み、アプリ作り、管理・運用まで [ 近藤 雄太 ]

価格:3608円
(2025/6/10 09:43時点)
感想(1件)


 



この記事へのコメント