人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PostgreSQLのビューからデータを取得するクエリを実行した場合、ビューの生成クエリ自体もそのタイミングで行われているのでしょうか。
そうであるならビューから取得するようにしてもパフォーマンスがあがったりすることはないということですよね(サブクエリとあまり変わらないので。)

やりたいことはデータ取得済みの仮想表オブジェクトのようなものを作りたいのですが。データ取得用テーブルをひとつ作ってトリガーで中身が動的に書き変わるようなものを作ったりするのでしょうか。PostgreSQLのトリガーの使い方なども含めてどういった方法が考えられるのかなど教えてください

●質問者: tumblr
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:postgreSQL ひとつ オブジェクト クエリ タイミング
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● kn1967
●60ポイント

(1)VIEWのパフォーマンス

CREATEの時点でパース(構文解析)が実施されているので

SQL投入 → パース → プランニング(実行計画) → 実行

におけるパースの部分を大幅に短縮する事ができますし

プログラム作成時などにはコードが短くなることによって

誤字脱字によるトラブルなども減らせます。


しかしながら、

VIEWあるいはVIEWを含む問い合わせの内容が複雑な場合は

プランニング段階や実行段階で大きく時間を喰いますので

目に見えるほどの効果を得られない事も多々あります。


では、どちらを選択すべきなのかという事になりますが

何度も利用するようなものであれば、VIEWのほうが

サブクエリよりも効率UPを「期待できる」という程度になり

非常にあいまいな返答をせざるを得ないところです。


(2)トリガ

仮想表(つまりはview)を使うべきか、それとも

専用の表を用意しておいて動的にメンテしていくべきか・・・。

用途や利用頻度、そして何よりデータベースの構造が

判らないので判断つきかねますが、関数&トリガではなく

ルールを学んで用いたほうがよさそうに思います。


8.3.5マニュアル

トリガ

http://old.postgresql.jp/document/pg835doc/html/triggers.html

http://old.postgresql.jp/document/pg835doc/html/trigger-definiti...

ルール

http://old.postgresql.jp/document/pg835doc/html/rules.html

http://old.postgresql.jp/document/pg835doc/html/rules-triggers.h...


(3)どういった方法が・・・

更新の多いデータベースであれば

サブクエリよりはVIEWを使って参照するのが良いかもしれません。

更新の少ないデータベースの場合は

ルールあるいは関数&トリガにて

参照用の表を実際に作ってしまうのが良いかもしれません。

いずれにしても

テーブルの正規化(あるいは非正規化)やインデックスの見直し

さらにやるなら、継承によるテーブルの小型化などなど・・・。

単純作業でデータを取り出せるようにする工夫が肝要となります。


以上、ヒントにでもなればよろしいのですが・・・。

◎質問者からの返答

大変参考になります。

ルールという方法を知らなかったので調べてみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ