C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: C# vs2005 検索時の処理速度 


(過去ログ 42 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■22282 / inTopicNo.1)  C# vs2005 検索時の処理速度 
  
□投稿者/ t6_kana (17回)-(2008/07/17(Thu) 21:10:16)

分類:[.NET 全般] 

2008/07/17(Thu) 21:14:10 編集(投稿者)

こんばんは。

標記件で調べています。C# vs2005 sqlserver2005 windows xp windows server 2003

下記ソースですと、datasetにいれて、とってくると件数(1万件とか)が多くなったときに
時間がかかりすぎるのですが、どのように修正したらよいでしょうか?
where句のところで修正するかdatasetのところでしゅうせいするかなのでしょうが…

宜しくお願いします(__)

SqlCommand cmd = new SqlCommand("SELECT * FROM user_master where UserID LIKE @UserId + '%' and UserName LIKE @UserName + '%' ", cn);
cmd.Parameters.AddWithValue("@UserId", textBox1.Text);
cmd.Parameters.AddWithValue("@UserName", textBox2.Text);


SqlDataAdapter da = new SqlDataAdapter();

da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, "user_master");

cn.Close();
引用返信 編集キー/
■22283 / inTopicNo.2)  Re[1]: C# vs2005 検索時の処理速度 
□投稿者/ やじゅ (491回)-(2008/07/17(Thu) 21:21:06)
やじゅ さんの Web サイト
No22282 (t6_kana さん) に返信
>
> 下記ソースですと、datasetにいれて、とってくると件数(1万件とか)が多くなったときに
> 時間がかかりすぎるのですが、どのように修正したらよいでしょうか?
> where句のところで修正するかdatasetのところでしゅうせいするかなのでしょうが…
>

仕様の見直しですね、ページ方式にするとか

引用返信 編集キー/
■22305 / inTopicNo.3)  Re[2]: C# vs2005 検索時の処理速度 
□投稿者/ おてやわらか (2回)-(2008/07/18(Fri) 01:30:55)
2008/07/18(Fri) 01:39:52 編集(投稿者)
2008/07/18(Fri) 01:38:02 編集(投稿者)
2008/07/18(Fri) 01:37:33 編集(投稿者)

>where UserID LIKE @UserId + '%' and UserName LIKE @UserName + '%' "

Like 演算子を使うと、Indexを付けていてもIndexが効かない場合がでてきます、今回の場合は効いていない様子。
理由>データの抽出範囲を限定するものがないので、テーブル上の該当Fieldを1つづつ、全てマッチングするため、
   キャッシュ上のデータだけでなくテーブルの該当Fieldの、全データを検索することになります。

どうするか、
今のままやるには、抽出範囲を限定するようにWhereを書く→データの範囲を限定できる要素はないのでしょうか?
Like退治をする。→仕様の見直しにつながるかも。
Like退治が出来ない場合→正規化について検索してみてください、第一正規化、第二正規化

検索するには
データベース チューニング
データベース プロファイラ
とかかでしょうか

10万件、100万件のデータから、1000件、2000件の数値:Duble、250Filedデータを引っ張っても
Indexがちゃんと、効いていれば、1秒以内に取ってこれます。Pen4−HT−2.4G:RAM2GBクラス
1万件程度でも、Indexが効いていないと、1G以上のワークメモリを必要として、10秒以上かかります。
引用返信 編集キー/
■22311 / inTopicNo.4)  Re[3]: C# vs2005 検索時の処理速度 
□投稿者/ t6_kana (18回)-(2008/07/18(Fri) 08:55:22)
やじゅさん おてやわらかさん

ありがとうございます(__)

まことに勝手ながらいったん保留させてください。

>仕様の見直しですね

さすがこれはへこみますorz

引用返信 編集キー/
■22327 / inTopicNo.5)  Re[4]: C# vs2005 検索時の処理速度 
□投稿者/ おてやわらか (3回)-(2008/07/18(Fri) 12:07:52)
2008/07/18(Fri) 12:23:10 編集(投稿者)

No22311 (t6_kana さん) に返信
>
> さすがこれはへこみますorz
>
>@UserId + '%' and UserName LIKE @UserName + '%'
なんの為に、これを行っているか説明あがると、別解を示す人がでてくるかも、
>cmd.Parameters.AddWithValue("@UserId", textBox1.Text);
>cmd.Parameters.AddWithValue("@UserName", textBox2.Text);
ユーザーIDと、ユーザー名から、何かのデータを引っ張っているようですが?
差し支えなければ、実際のテーブルの構造と、名称は違ってもいいですので、
テーブルの構造を示してみては?

DB初心者の頃書いたクエリです。
1つのTableへ何でもかんでも突っ込んでいたので、こんなクエリになっています。データロギングですので、すぐに100万件くらい突破します。

データ増加とともに遅くなって、クレーム発生
100日稼働で、このクエリが、数十秒かかるように
SELECT * FROM data WHERE page Like '1' AND dir_id Like 'S_DATA' AND ([time] Between '2008-07-11' AND '2008-07-12') ORDER BY page,dir_id, time,Rev DESC
Like退治をしたもの
平均0.3秒位になりました。
SELECT * FROM data WHERE page = '1' AND dir_id = 'S_DATA' AND ([time] Between '2008-07-11' AND '2008-07-12') ORDER BY page,dir_id, time,Rev DESC
引用返信 編集キー/
■22340 / inTopicNo.6)  Re[5]: C# vs2005 検索時の処理速度 
□投稿者/ medaka (7回)-(2008/07/18(Fri) 16:16:25)
SQL Server2005 ならlikeの後ろの%はインデックス使ってくれるのでは?
インデックスつけてないってことはないですよね
引用返信 編集キー/
■22341 / inTopicNo.7)  Re[6]: C# vs2005 検索時の処理速度 
□投稿者/ medaka (8回)-(2008/07/18(Fri) 16:17:01)
No22340 (medaka さん) に返信
> SQL Server2005 ならlikeの後ろの%はインデックス使ってくれるのでは?
> インデックスつけてないってことはないですよね
引用返信 編集キー/
■22343 / inTopicNo.8)  Re[6]: C# vs2005 検索時の処理速度 
□投稿者/ みきぬ (25回)-(2008/07/18(Fri) 16:20:03)
No22340 (medaka さん) に返信
> SQL Server2005 ならlikeの後ろの%はインデックス使ってくれるのでは?
> インデックスつけてないってことはないですよね
私もそう思って調べてみたんですが、どうやら違うようで。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=20045&KLOG=39#5

# 環境がないんで自分じゃ試せないっす
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -