>VIEWに対してWHERE句をつける入力中の回答があります。ページを離れますか?※ページを離れると、回答が消えてしまいますページを離れるA回答を続ける入力中のお礼があります。22:34回答数:4件SQLでVIEWを作成し、そのVIEWに対してSELECT文を書くときに、そのVIEWに対してWHERE句をつけるのは、パフォーマンスを必ず下げることになるのでしょうか?勝手な認識ですが、VIEWにWHERE句をつけると遅くなる場合があると聞きました。VIEWの組み方にももちろんよると思いますが、VIEWは消極的に使い、出来る限りJOINなどして結合したSQLを書くほうが無難なのでしょうか?よろしくお願いいたします。通報するこの質問への回答は締め切られました。keyCol3はインデックス(KeyCol1,KeyCol2,KeyCol3)を使えるのに、Viewを使ったほうが、インデックスを使えない(KeyCol2が'1'を抽出してからkeyCol1='X'を洗い出すため)なんてことが起きるかもしれません。(この例は、SQLを解析した結果で実行計画が同じ処理となるかもしれませんが。)なお、SQLでVIEWを作成し、そのVIEWに対してSELECT文を書くときに、そのVIEWに対してWHERE句をつけるのは、パフォーマンスを必ず下げることになるのでしょうか?は必ずしも下げることになるとは限りません。15としようがあまり変わらないはずです。(SQL解析時間が少し早くなるかもしれませんが、体感速度の差というレベルではないはず。句を書くのはお薦めしません。12を探すという動きになったらきわめて遅いだけです。(SQL解析能力に期待しましょう・・・というわけにはいかないので。'1'としたほうがはるかに早い。21:14>確認で申し訳ありませんが、結局、VIEWに対してWHERE句をつけても、相当複雑や件数が多い(10万件以上くらい)VIEWでない限り、パフォーマンスが落ちことは早々ないと考えてよろしいでしょうか?よろしくお願いいたします。考えて良いと思います。13:40あくまでも個人的な意見ですが。VIEWを多用すると、後でロジックを解析する場合に、解析が面倒になるので、あまり使わない方が良いと考えます。便利な場合もあります、私の作っている開発支援ツールは7種類のRDBMSで動くようになっていますが、テーブル一覧等を検索したい場合は、RDBMS毎にテーブル構造が大きく異なっているので、VIEWを使って同じ構造に見せかける事でツール側のSQLを同じに出来るようにしています。回答、誠にありがとうございます。確かにそのような複数のミドルウェアで動かす場合、大変発揮するVIEWですね。一つ勉強になりました。19:05効率を気にする時には、まず、ちゃんと動く、且つ、読みやすくメンテナンスしやすいコードを書く事が先決です。プログラミングしてデバッグして運用する。運用しているうちに必ず手直しや改造が発生し、その時に再び、その書いたコードを読んで理解してから修正し、またデバッグする。このライフサイクル全体を見れば、読むに堪えない、複雑なSQLで、体感できないくらいの実行速度のアップを図るのと、使える物は何でも使って、とにかく見やすいSQLを組むのと、どちらが「総合的な」効率が良いかというと、間違いなく後者です。ぉ言う意味では、Viewは積極的に使う価値のあるツールだと思います。(近年、オプティマイザの性能もずいぶんよくなりました。DBMSは必要とあらば、自分で勝手にViewを展開してでも、実行順序をコントロールします。)ただし、Viewを使用したSQLを作った時に、どうしても、実行速度が実用にならないと判断された時は別です。インデックスや、下手するとテーブル設計がまずいことが速度低下の原因であることが多いですが、Viewが犯人だと確定したら、その時に、初めて、Viewを使わないでSQLを構築することを考えるのが筋ですね。すれば、Viewが必ず効率を下げるかとか言う議論はある意味、無意味です。いわゆる「効率化」とか「最適化」というのは細心の注意と測定結果をもとに、課題に応じて計画的にやるもので、原則に従って機械的に適用するものではありません。回答、誠にありがとうございます。おっしゃるとおり、確かに体感速度を感じない速度向上を気にするより、後で見た時に分かり良いSQLであることが大変重要であることは、私も経験上ございます。積極的に使うことについては、個人的な考えにより、様々なご意見はございますが、いろいろなケースで試して行きたいと思います。確認で申し訳ありませんが、結局、VIEWに対してWHERE句をつけても、相当複雑や件数が多い(10万件以上くらい)VIEWでない限り、パフォーマンスが落ちことは早々ないと考えてよろしいでしょうか?よろしくお願いいたします。意味」に関するQ&A:簿記1級の意味と難易度について教えて下さい。SQL」に関するQ&A:sqlplusで表示が変なので、出力を整形したい。回答数ランキングです。条件MySQL速度JOINこのQ&Aと関連する良く見られている質問QVIEWの元のテーブルのindexって有効なのでしょうか?VIEWの元のテーブルのindexって有効なのでしょうか?MYSQLサーバのバージョンは5.0.77です。Aベストアンサービューの基表に、有効活用できるインデクスがあれば、インデクスは活用されます。>例えば元のテーブルに「hoge_id(index)」があり、>VIEWテーブルが「vtable」だとします。atable.id>(atable.idもindex)>などとした場合、hoge_idのindexが有効で高速に結果が返ってくるということでよろしいのでしょうか。表の母体データ件数が相当に少ない(例えば、数百件など)とか、重複キー値が多量に存在するといった場合は、RDBMSのオプティマイザが、「インデクスを使うより、テーブルスキャン(表のデータを全件サーチ)した方が速い」と判断し、インデクスを利用しない場合もあります。主キーなどユニークなキーでの「=」条件や範囲条件などで、母体データからある程度絞り込んだ検索をするなら、インデクスの活用で母体データが大量に増えても、一定の性能を出せます。ビューの基表に、有効活用できるインデクスがあれば、インデクスは活用されます。>例えば元のテーブルに「hoge_id(index)」があり、>VIEWテーブルが「vtable」だとします。atable.id>(atable.idもindex)>などとした場合、hoge_idのindexが有効で高速に結果が返ってくるということでよろしいのでしょうか。表の母体データ件数が相当に少ない(例えば、数百件など)とか、重複キー値...続きを読む他の回答も見るQViewにインデックスは張れますか?件名の通りなのですが、作成したViewが遅くて困っています。改善方法としてはViewを作成しないで従来のSQLにインデックスを張って取得する方法にしようかなと考えています。なにかいい方法はありますか?AベストアンサーViewの元テーブルに適切なIndexを貼る、ではいけないのですか?他の回答も見るQビュー定義をプログラムで動的に扱う方法ビュー定義をプログラムで動的に扱う方法SQLServer2008+VB6(ExcelVBA)構成のシステムで、日付フィールドを含むテーブルのビューを作成しておき、VBプログラムからSQL文でビューを呼び出す時、日付範囲を指定して絞り込まれた結果をビューで返したいのですが、ストアドを使わずにビューだけで実現することはできないでしょうか?Aベストアンサー#2です。日付='2010/07/09'”>Cmd.Executeもちろん、権限があればできます。そのリクエストをした人にもう一度確認することをお勧めします。「長いクエリはビューで管理したい」というリクエストは理解できます。したい」というリクエストをしたとすれば、その人はシステムのことを理解していないので、説明すべきだと思います。・ビュー定義の一部だけを再作成することはできないので、再作成には常に全部を実行する必要がある。処理はわかりやすくならない#2です。日付='2010/07/09'”>Cmd.Executeもちろん、権限があればできます。そのリクエストをした人にもう一度確認することをお勧めします。「長いクエリはビューで管理したい」というリクエストは理解できます。表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の書き方がわからず困っています。(+)としてみましたが、うまくいきませんでした。任意の値と書くのが一般的でしょうね。entry.....というエラーが出てしまいましたいつもお世話になります。entry.....というエラーが出てしまいました。お詳しい方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?よろしくお願いいたします。52tblAの主キー:dataA1とdataA2tblBの主キー:dataB1dataA1とdataA2はtblAの主キーとなっているため、重複してしまうということのようです。tblBの主キーはdataB1であるため、抽出されてくるデータは常に1件なので問題ないと期待していましたが、甘くなかったようです。何か良い方法はないものでしょうか?よろしくお願いいたします。1062」は、重複データを格納しようとした場合に出力されるエラーです。keyの指定が、質問中に記された通りでなく、2件以上検索されているかです。>何か良い方法はないものでしょうか?何をするための方法を、聞きたいのかが分かりませんが?他の回答も見るQMySQLで改行を含む文の登録のしかた(改行コードMySQLで改行を含む文を登録したいんですが、改行を改行コードに書き換えて登録したいです。改行コードは¥nで登録すれば良いです。table1が実行したい。4つのテーブルは全て同じ構造で、データが違うのみです。Aベストアンサービューでは不可能だと思います。同じ様なアクセス方法を行いたいのであれば、テーブル値を返すユーザー定義関数を作成する方法があるかと思います。構造は同じと言う事なので、1つの関数で済むと思いますし。ユーザー定義関数(1~4のパラメータ)上記例の様な使い方が可能です。他の回答も見るQMAX値を条件にデータを取得するには?SQL文で困っています。下記のようなデータがあった場合、それぞれの区分毎に年月が最大(最新)のデータを取得したいです。(実際には1レコードにその他項目があり、それらも取得します。400よろしくお願いします。Aベストアンサーテーブル名をXXXとすると次のようなSQLでよいと思います。他の回答も見るQレスポンスをよくするには?こんにちは。最近ずっと仕事でシステムのレスポンスの改善を行っています。ログをとり、VIEWが遅いのはわかりました。INDEXを貼ってみたりヒント文を使ってみたりしたのですが、なかなか早くなりません。コストが現在2693あります。両方ともデータ件数は100万件ほどあります。それぐらいの件数になると、コストはどうしても増えてしまうのでしょうか?こうしたら早くなるのでは?等の案があったら教えてください、お願いします。processedこんにちは。最近ずっと仕事でシステムのレスポンスの改善を行っています。ログをとり、VIEWが遅いのはわかりました。INDEXを貼ってみたりヒント文を使ってみたりしたのですが、なかなか早くなりません。コストが現在2693あります。両方ともデータ件数は100万件ほどあります。・DENPYO_NO,EDABANとHAKO_KBNの索引を同じにするかどうか実行結果を取って比べてみるということくらいしか回答できません。コストを下げるには、検索で使用するレコード母数を少なくする必要があると思います。「テーブルにデータをいれておかない」ということです。joinの違いがよくわかりません。出てくる結果が違います。3の3レコードしか出力されません。出てくる結果が違います。