質問
Join句でテーブルを結合するのと、create viewのFrom句でテーブルを複数取得しviewを作成するのではどちらが効率がいいですか? |
解答
結論から言うと:
✅ 詳しく解説1. ビュー( |
| 比較項目 | 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が必要
|
|

この記事へのコメント