• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ビューのソートについて)

ビューのソートについて

このQ&Aのポイント
  • ビューにて指定したソート順でSQLが実行されるが、ビューを開く際にはソートが適用されないことがある。
  • 特定の設定変更により、ビューを開く際にもソートが適用されるようになる。
  • TOP(件数)に全データ数以上を指定することで、ソートが機能するが、ビューの本来の目的とは異なる使い方となることがある。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

ビューを単純に照会したときにORDER句を切らなくても希望する並び順でSELECTできれば、運用上は便利なことが多いです。 そのため、SQL Serverでは昔からTipsでTOP 100 PERCENTで並び替える方法が認識されていました。 (Tipsとある通り、普通はViewの外でOrder切ります) ただし、SQL Server 2005になって、TOP 100 PERCENTは「並び替えの必要なし」とオプティマイザが判断するように仕様が変更されてしまいました。そのため、SQL Server 2005ではTOP 100 PERCENT句をViewに切っても並び替えは起こりません。 それだけなら分かりやすいのですが、やはりこの技を使っていた人が多かったためでしょうか。SP2の後の累積パッチ「SP2の累積プログラムその2」でこれを修正するモジュールが提供されています。 SP2には入っていないし、わざわざ当てる人も少ないと思うので、次のSP3が出たとして、それ当てた時からTOP 100 PERCENTが効くようになるでしょう。 ちなみにSQL Server 2008でも初期バージョンではTOP 100 PERCENTが効かず、累積パッチが提供されています。 ということで、そのようなビューの使い方は正しいアプローチではありませんが、SQL Serverの裏ワザの一つですと認識ください。

SEsyo
質問者

お礼

この数日悶々としていましたが、スッキリしました。 本当にありがとうございます。 ACCESSのMDBからADP+SQLに変えようとしているのですが・・・ このビューを表示させる(並び替える)のに、SELECTを使うとビューの SELECTと合わせて二回のSELECTをサーバー側とクライアント側で 一回ずつ実行する訳ですよね? 効率が悪い様な気がして一回で済ませようと考えています。 そんな事はないのでしょうか? (今は数は増えるかもしれませんが、基本的にビュー側でSELECTして、 ACCESS側はそのクエリーを表示させるように作ろうと考えています) ビューだけでなく関数も同様ですのでパッチをあてたいのですが、 SP2の後の累積パッチ「SP2の累積プログラムその2」を見つける事が 出来ません、所在を教えて頂けると助かります。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.4

>http://support.microsoft.com/kb/936305/ ↑の先頭にある「修正プログラムのダウンロード」だと 64bitの環境しかありません、32bitのパッチは何処にあるのでしょうか? これは気づきませんでした。32bit版だけ提供を打ち切っているのですね。その場合は累積プログラム3以降を使えばよいです。 http://support.microsoft.com/kb/939537/ ちなみに累積プログラムは文字通りそれまでのパッチが含まれます。 (すでに累積プログラムは9まで出ています) >ビューは細工をせずに使い、細工する場合はテーブル値関数を使った方がいいと言うことでしょうか? 基本的にはその通りです。もし極力すべて(抽出も並び替えも)をサーバ側のオブジェクトに含めて処理してしまい、Accessは表示に徹するという考えなら、むしろストアドプロシージャを使う方がよいと思います(TOP 100 PERCENTをあてにする必要もなくなりますし)。 まあ、adpとの相性やそれ以外の使い勝手もあるでしょうから一概にはいえませんが。まあいろいろ試してみてください。

SEsyo
質問者

お礼

深夜の回答ありがとうございました。 結果を報告しますと、2をDLしてインストールしようとしたのですが、 更新する項目にチェックが入れられず、結局9をDLしてインストール しました。 しかし、改善はされませんでした。 あれこれ変なパッチをあてようとしたのが原因だと思います。 現在は180日の評価版を使っていますので、サーバーを導入する時は この辺を注意して作業します。 ビューについては教えていただいた方法で検討する事にします。 本当にありがとうございました、今後も質問することが多々あると思いますが、 何卒よろしくお願いします。

すると、全ての回答が全文表示されます。
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

ビューの中にORDERを切ると、そのビューを照会するたびにORDERが実行されますので、基本的には非効率です。 たとえば、毎回Accessで抽出するデータは数十件なのに、テーブルには数万件のデータが入っているケースを考えてみてください。 テーブル関数ならば結果を絞って返すこともできますが、ビューの場合は本来なら数十件の並べ替えで済むところを、データベース側で毎回数万件の並べ替えを行うことになりかねません。 従って、常に全件近く戻す場合を除いてはビューの中にはORDERを切らない方がいいと思いますよ。 なお、累積プログラム2は以下です。 http://support.microsoft.com/kb/936305/ 累積プログラムはSPに含まれるまでは、基本的に自己責任で当てると思った方がよいです。十分確認してからの適用をお勧めします。

SEsyo
質問者

お礼

何度も回答いただきありがとうございます。 あっちこっち探したのですがスキル不足で見つかりませんでした。 http://support.microsoft.com/kb/936305/ ↑の先頭にある「修正プログラムのダウンロード」だと 64bitの環境しかありません、32bitのパッチは何処にあるのでしょうか? > ビューを照会するたびにORDERが実行されますので非効率です。 ビューは細工をせずに使い、細工する場合はテーブル値関数を 使った方がいいと言うことでしょうか? (イマイチビューと関数の使い分けが理解できておりません)

すると、全ての回答が全文表示されます。
回答No.1

>「ビュー」とはそんな使い方なのでしょうか? の意図するところはよくわかりませんが.. ビューを使用する目的としては、 セキュリティ上、全データでは無く一部のデータを見せるために使用するのが一般的ではないかと思います。(元のテーブルはセキュリティで制限して直接見えない様にして、ビューだけを見せる様にする) または よく使用する条件でビューを作成して使用する。 質問の例の、 TOP (100) PERCENT は意味が無いですね。 TOP句は書く必要がありません。 二つ目は、端末コードの若い順に1000行を選択する意味になります。

SEsyo
質問者

補足

ありがとうございます。 もう少し教えて下さい。 > TOP (100) PERCENT は意味が無いですね。 ORDER句があるとTOP句は自動で付与されてしまいます。 (本を読むと「ビュー」ではTOP句が無いときはORDER句も 指定できないからだと思います) ただ、TOP (100) PERCENT だと並び替えされないのです。 「ビュー」で全件表示でソートするには最大件数以上の行数を 指定しないとソートできないのでしょうか? TOP (100) PERCENT・・・並び替えしない TOP (1000)・・・並び替わる

すると、全ての回答が全文表示されます。

専門家に質問してみよう