- PR -

検索条件によって異なるビューの指定方法

投稿者投稿内容
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2007-09-25 10:38
いつもお世話になります。

あるビューから条件を指定してデータを検索することを考えています。
例えば、VIEW_Aはマスタ番号(第一ソートキー)、マスタグループ(第二ソートキー)、マスタテキスト、といった項目を持っているとします。
検索条件にマスタ番号を指定した場合には、VIEW_Aの第一ソートキーでの検索の為、比較的処理速度も速いと思われるのですが、検索条件にマスタグループを指定した場合には第二ソートキーで検索する為に処理速度が遅くならないか心配です。

このように検索キーが場合によって変化する場合、それぞれの検索キー用のビューを作成し、条件ごとにビューを読み分ける方が効率的なのでしょうか?しかし検索キーが多数ある場合には非常に開発にロスが発生してしまいます。
検索条件が複数考えられる場合、どういった方法でビューからデータを抽出のが最も効率的なのでしょうか?
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-09-25 11:24
まず、DBMS を明示した方が良いです。次に、速度は心配するものではなく計測するものです。

第一ソートキー、第二ソートキーというものはよく知りませんが、選択操作に使用する列にインデックスを作れば速度は変わります。

それをせずにビューだけ増やしていっても速度が速くなるとは思えませんが、具体的にはどういった方法なのでしょうか?

_________________
囚人のジレンマな日々
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2007-09-25 11:46
オラクルなら実行計画をみれば、検索パスがわかる。
それを見て判断しましょう。
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2007-09-25 16:35
ご返答ありがとうございます。

SQL Server 2000にて開発しています。
また、第一ソートキーなどと言っているのはビューの設計になります。

検索結果出力までの時間はまだ計測できていませんが、前回の書き込みについて補足させていただきます。

例えばマスタ番号を検索するストアドプロシージャがあった場合、ストアドプロシージャで使用するビューは、マスタ番号別のビュー@とマスタグループ別のビューAでは@を使用する方がAを使用するより処理が早いのでは?と考えています。
その為、検索内容ごとにビューを読み分ける方が良いのかと疑問が出ました。

囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-09-25 17:13
引用:

例えばマスタ番号を検索するストアドプロシージャがあった場合、ストアドプロシージャで使用するビューは、マスタ番号別のビュー@とマスタグループ別のビューAでは@を使用する方がAを使用するより処理が早いのでは?と考えています。


「マスタ番号別のビュー」「マスタグループ別のビュー」というのがよく分からないのですが、ビューに順序なんてありませんよね。

「マスタ番号別のビュー」「マスタグループ別のビュー」の具体的な定義ってどんなのでしょうか?(Group by してるって事かな?)

_________________
囚人のジレンマな日々
ともこ
大ベテラン
会議室デビュー日: 2007/09/14
投稿数: 111
投稿日時: 2007-09-25 17:29
引用-------------------------------
「マスタ番号別のビュー」「マスタグループ別のビュー」というのがよく分からないのですが、ビューに順序なんてありませんよね。

「マスタ番号別のビュー」「マスタグループ別のビュー」の具体的な定義ってどんなのでしょうか?(Group by してるって事かな?)
----------------------------------

「マスタ番号別のビュー」とは、ビューの一番左にマスタ番号を配置し昇順ソートを行なっているビューで、同様に、
「マスタグループ別のビュー」は、ビューの一番左にマスタグループを配置し昇順ソートを行なっているビューです。
GROUP BY については行なっていません。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-09-25 18:34
CREATE VIEW で作るビューの事を言っているんですよね?
だとしたら、完全にビューの認識を間違っています。

さっきも言った通り、ビューに「順序」なんてありません。「ビューの一番左にマスタ番号を配置し昇順ソート」なんてできましたか?私の記憶では ORDER BY できなかったと思いますが。

そして、「ソート」というのはレコードの選択が終わってからやるものです。よって並び順が検索の速度に影響することはありません。最初の回答で述べたとおりインデックスを作ってください。

とりあえず、実行プランを見てどのように検索するのかを勉強して、その前に RDBMS についてもう少し勉強したほうがよいです。
_________________
囚人のジレンマな日々
dodo
ベテラン
会議室デビュー日: 2004/05/12
投稿数: 99
お住まい・勤務地: 東京都渋谷区
投稿日時: 2007-09-25 19:48
引用:

囚人さんの書き込み (2007-09-25 18:34) より:

さっきも言った通り、ビューに「順序」なんてありません。



他のRDBMSではその通りだと思いますが、SQL Server 2000では、Viewにorder byを指定することは可能です。
ただし2005では、order byを指定しても並び替えが行われなくなったようです。
回避策は以下のURLを参照してください。
http://support.microsoft.com/kb/926292/en

引用:

とりあえず、実行プランを見てどのように検索するのかを勉強して、その前に RDBMS についてもう少し勉強したほうがよいです。


この点については同感です。

スキルアップ/キャリアアップ(JOB@IT)