• 締切済み

Select文の遅延

以下の.net関数を使用して、Select文を作成し SqlServerからデータを抽出しています。 http://msdn.microsoft.com/ja-jp/library/zxkb3c3d(v=vs.110).aspx http://msdn.microsoft.com/ja-jp/library/system.data.common.dbdataadapter.selectcommand(v=vs.110).aspx 条件を変え二つのSelect文を作成したところ、 後者だけが極端に遅延しタイムアウトしてしまいます。 (1)Select ID From TestView Where ID = 0 ※ID列はint型 (2)Select ID From TestView Where ID = 1 ※ID列はint型 Select対象となるデータ数(TestView)はかなりの量がありますが、 ID = 0、ID = 1 によって抽出されるデータ自体はどちらも10件程度です。 なぜID = 0ではすぐに抽出でき、ID = 1では遅延するのか全く原因がわかりません。 私自身も色々と確認をしているのですが、 過去の経験則や、ここを確認すると良いなど 調べるための情報がありましたらご提供頂けませんでしょうか? 宜しくお願い致します。

みんなの回答

  • norayuni
  • ベストアンサー率79% (27/34)
回答No.3

Viewとなると、正直提示された情報だけでは原因特定は厳しいので、 まずは実行計画を確認してみると良いかと思います。 後はもう少し情報を増やす意味で次のオプションをつけてみるのもいいかと。 ----- set statistics io on set statistics time on set statistics profile on go <調査したいクエリ> go set statistics profile off set statistics time off set statistics io off go -----

megumi1122
質問者

補足

確認が遅くなりまして、すみません。 >Viewとなると、正直提示された情報だけでは原因特定は厳しい そうですよね…、わかり辛い質問で申し訳ありません。 >まずは実行計画を確認してみると良いかと思います。 実行計画も確認してはいるのですが、 確かに変化はあるものの凡そ同じ雰囲気でそれぞれのテーブルが位置づけされている様な気はしています。 >後はもう少し情報を増やす意味で次のオプションをつけてみるのもいいかと なるほど、オプションですか。 気が付かなかったです、情報とてもありがたいです。 早速試してみようと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

じゃあ、viewからSelectするSQL文ではなくて、 View定義のSQL文が怪しいのでは?

megumi1122
質問者

補足

確認が遅くなりまして、すみません。 確かにView定義側の記載が怪しい可能性もあります。 しかしながら、Viewの中身としましては一般的(…かどうかは分かりませんが…)な、 SELECT A.ID FROM TABLE_A A INNER JOIN TABLE_B B ON A.ID = B.ID INNER JOIN TABLE_C C ON B.ID = C.ID … 特に捻った形ではないSQLになっているかと思っています。

全文を見る
すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

TestView はテーブルですか?20レコードの? 名前にviewがあるところから、実はviewなんですか?

megumi1122
質問者

補足

回答ありがとうございます。 お察しの通り、TestViewは 幾つかのテーブルをJOINしたViewになります。 記載が足らずすみません。

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

関連するQ&A

  • select文について

    現在、"user"というテーブルに"id"と"date(datetime)"という項目があり、その"date"にあるデータの中から月を指定して抽出したくて以下ようなSQL文を書いたのですがうまくいきません。 SELECT `id` FROM `user` WHERE convert((SELECT extract(month from `date`) FROM `user`), INTEGER) = 9 mysql5.0です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SELECT文の条件

    Linux + mysql4.1.22を使っています。 先ほど気が付いたのですが、テーブルsampleにフィールドid(int)がある時、 SELECT * FROM sample WHERE id='1a' とすると、id=1のデータが取得できてしまいました。 どうしてなんでしょう。ご存知の方、ご教示下さい。

    • ベストアンサー
    • MySQL
  • Select文を教えて下さい

    select文についてお教えください。環境はAccess2003,Win XPで動かしています。 TABLE ID(INT),STOCK(INT) 001,100 001,200 001, 002,200 002,300 002,400 003,100 上記のようなテーブル、データがあります。 ■抽出したい行 001,100 001,200 ■抽出条件 STOCKに空がはいっている。 STOCKに空がはいっている行は選択しない。 STOCKに空がはいっているIDで、同一IDでSTOCKにデータがある行を抜き出したいです。 どのようにSQLを組み立てればよいかわかりません。 宜しくお願い致します。

  • parseメソッドのコードを見たいです

    .NETのparseメソッドがどのように実装されているか見たいのですが、ネットで探しても見つかりません。 http://msdn.microsoft.com/ja-jp/library/system.int32.parse(v=vs.110).aspx 上記のようなサイトは見つかるのですが・・・やはり公開していないのでしょうか?よろしくお願いします。

  • もうちょっと賢いSELECT文が書けないものでしょうか

    初めまして、最近SQLをかじり始めたぺーぺーです。 効率の悪いSELECT文しか書けずに困っています。 下記のテーブルsoftware_tableから、 ・name列「oracle」 ・version値が最大 のレコードに含まれるid(=3)を拾ってきたいのですが、自分の頭では副問い合わせを使う方法か、ソートを使う方法しか思いつきません。 問題は副問い合わせ・ソートを使うと計算コストが大きくなってしまうことで、できることなら副問い合わせ・ソートを使わずに解決したいのですが、何か方法はないものでしょうか? よろしくお願い致します。 ----------------------------- software_table id name version 1 oracle 1 2 oracle 2 3 oracle 3 4 postgres 1 5 postgres 2 6 postgres 3 7 postgres 4 ----------------------------- ■副問い合わせを使った方法 SELECT id FROM software_table WHERE name = 'oracle' AND version = (SELECT max(version) FROM software_table WHERE name = 'oracle'); ■ソートを使った例 SELECT id FROM software_table WHERE name = 'oracle' ORDER BY version DESC LIMIT 1 OFFSET 0; -----------------------------

  • Sybase のselect文の書き方について

    sybaseのselect文の書き方についてご教授お願いします。 以下のようなselect文を発行したのですが エラーになってしまいます。 Sybase では、この様なselectはできないのでしょうか? -------------------------------------------------------------- select q2.kind_id, q2.name, q1.id, q1.scription FROM (select * FROM tb_info WHERE tb_info.id = (select id from tb_info where u_id = 'XYZ')) q1 RIGHT JOIN ( SELECT * FROM tb_kind_info WHERE tb_kind_info.flg='1') q2 ON q1.kind_id = q2.kind_id -------------------------------------------------------------- -------------------------------------------------------------- 実行例 1> select q2.kind_id, q2.name, q1.id, q1.scription FROM (select * FROM tb_info WHERE tb_info.id = (select id from tb_info where u_id = 'XYZ')) q1 RIGHT JOIN ( SELECT * FROM tb_kind_info WHERE tb_kind_info.flg='1') q2 ON q1.kind_id = q2.kind_id 2> 3> 4> 5> 6> 7> 8> go Msg 156, Level 15, State 2: Server 'xxxxx', Line 3: キーワード select の近くに、構文エラーがあります。 Msg 102, Level 15, State 1: Server 'xxxxx', Line 3: ')' の近くに、構文エラーがあります。 Msg 102, Level 15, State 1: Server 'xxxxx', Line 5: 'q2' の近くに、構文エラーがあります。 -------------------------------------------------------------- MS Accsess上ではちゃんと取れることを確認できました。 どうぞよろしくお願いいたします。

  • SELECT文の二段重ね

    次のSQL文を実行します。 create table1 (id, english) insert table1 (1,"foo") insert table1 (2,"bar") create table2 (id, japanese) insert table2 (1, "ふー") insert table2 (2, "ばー") SQL文法としては誤ってますが、成功したとします。 いま、select id from table1 where english = 'foo'; で1が得られます。 いま、select japanese from table2 where id = 1; で"ふー"が得られます。 これを一つのSQLite3のselect文で実現できないでしょうか。 select japanese from table2 where id = (select id from table1 where english = 'foo'); で良いですか? カテゴリ選択にSQLiteが無いのは、人気が無いからですかね。

  • 2回SELECTせずにすむ方法?

    <やりたいこと> ・(ブログの)エントリーデータを元に、「categoryテーブル」より、親カテゴリー内容と、子カテゴリー内容を抽出したい <テーブル構成> ■categoryテーブル ・category_idカラム ・parent_idカラム ・その他色々カラム <現状> 1. SELECT * FROM category where category_id = :category_id 2. 1で抽出したデータのparent_idを取り出して、再度、SELECT   SELECT * FROM category where category_id = :parent_id <質問> ・2回SELECTしているのが冗長な気もするのですが、普通はどう書くのでしょうか? ・もっと良いテーブル構成があれば教えてください ※内容 … ブログの「メイン」「サブ」カテゴリー。1つのメインカテゴリーにつき、サブカテゴリーが複数

    • ベストアンサー
    • MySQL
  • MySQLのselect文で、最大ID値のデータを呼び出す

    MySQLのテーブルのフィールド名として「ID」を登録しています。(型はint) そこで、select文で最大ID値のデータを呼び出すにはどうすればいいのか教えて頂けないでしょうか? select * from tableA ?????;

    • ベストアンサー
    • MySQL
  • MySQLのselect文の設定に関して

    MySQLのselect文で、IDを例えば10001~10010までを検索する場合はどうすればいいのか教えて頂けないでしょうか? select * from table_A where ???

    • ベストアンサー
    • MySQL