JV-Dataの使い方あれこれ |
タイトル | : 馬毎SEデーターの検索速度 |
記事No | : 2317 |
投稿日 | : 2010/02/15(Mon) 20:41 |
投稿者 | : はすめますて(^_^) |
|
場違いな質問かもしれませんが、皆様よろしくお願いいたします。 環境は、アクセスmdbもしくは、sql server 2005のデーターべス C#2005 OS vista で馬毎SEデーターの表示をテストしましたが、表示速度が遅くタイムアウ トが出てしまします。(馬吉ぐらいの速度にしたいです。) とりあえず2年分で、おおざっぱに、10万件ファイルサイズ100M位なら問題なく 動きますが、10年分80万件ファイルサイズ800Mだと、とても遅く使えません。や りたいことは、蓄積系で競走馬の過去成績を表示することです。SQLの構文は、S ELECT * FROM UMA_RACE WHERE KettoNum='血統番号'です。C#では、 DataSet ds=new DataSet("UMA_RACE"); Da=new SqlDataAdapter(sqlstr,cn); Da.Fill(ds,"UMA_RACE"); put_dgv(ds); として、datagridviewに表示しています。 馬吉のサンプルを見ても、上記の様なsql構文が、無かったような?気がします 。どうか皆様ご教授ねがいます。 |
|
タイトル | : Re: 馬毎SEデーターの検索速度 |
記事No | : 2318 |
投稿日 | : 2010/02/20(Sat) 01:02 |
投稿者 | : 通行人A |
|
Indexを付けて使ってますか? Indexを付けて検索すれば80万件程度なら大抵のDBなら1秒以下で抽出するはず ですが…。 |
|
タイトル | : Re^2: 馬毎SEデーターの検索速度 |
記事No | : 2319 |
投稿日 | : 2010/02/20(Sat) 23:01 |
投稿者 | : はすめますて(^_^) |
|
> Indexを付けて使ってますか? > Indexを付けて検索すれば80万件程度なら大抵のDBなら1秒以下で抽出する はず > ですが…。 vs2005のテーブル表示で、鍵のマークがあれば、Indexになってるんでは、ない のですか?ユニークキーらしいのですが、よく解りません。検索は、一年単位で の検索なら、1秒は、でます。 とりあえず10年分の検索だと、初回は、20秒ぐらいで、つぎは、何とか、3秒ぐ らいでますが、たまにタイムアウト出ます。安定して3秒位で、表示したいです 。Indexが効いていないのか?抽出が多すぎるのか?素人なんで、皆様アドバイ スよろしくおねがいいたします。 |
|
タイトル | : Re^3: 馬毎SEデーターの検索速度 |
記事No | : 2320 |
投稿日 | : 2010/02/21(Sun) 15:17 |
投稿者 | : 通行人A |
|
通行人Aです。 MDBは多少触っていますが、SQL Server2005もVS2005(C#)も使ったこ とありません(持っていません)ので画面の説明をされても私にはなん とも回答のしようがありません。m(_~_)m
また、「はすめますて(^_^) 」さんのデータベース構造(テーブル 構造など)がどのようなものかもわかりませんので一般的なことしか 言えません。言の端からINDEXの何たるかをまだ理解されていない ようなので簡単に説明を
検索速度を速くするには、検索目的に応じてデータをソートしておく のがベストですが、通常、データは希望どおりには並んでいません。 INDEXは検索目的に応じてソートされたデータを別に確保しておく ためのものです。 INDEXはDB側が勝手に作ってくれるものではなく、自分でどんな検索 をするか、その検索のためにはデータがどのようにソートされいるの が良いかを考えて、自分でテーブルへ設定するものです。
ユニークキーはテーブル内の特定のフィールドに関して、あるいは 複数フィールドの組合せに関してデータの重複を避けるため (ユニークであることを確保するため)DBに自動的にチェックさせる ためのものです。 悪い言い方をすれば、DBに自動でチェックさせてDBエンジニアがサボる ためのものです。 ユニークキーの目的はINDEXとは異なりますが。重複のチェック作業を 素早く行うために、キーとして設定されたフィールドについてソート したデータを持っています。 したがって、検索時にユニークキーがINDEXとして使われることもあり ますが、検索目的によっては速度の向上に寄与しないこともあります。 (間違って使うと足を引っ張ることもありえます) > 検索は、一年単位での検索なら、1秒は、でます。 (改行位置を変えました) といわれているので、 仮にユニークキーが 開催年月日(あるいは開催年+月日+その他) を元に設定されていれば納得できる話です。
今回の場合 KettoNumフィールドを対象に検索するわけですから、KettoNumに ついてのINDEXを作成すればKettoNum順にソートしたデータをDBが 別に確保します。 以下、非常にラフな説明になりますが データがソートされていれば80万件のデータから1件を抽出するには 20回程度のデータアクセスで済みます。(2の20乗≒100万ですから) したがって、目的のKettoNumの先頭を検索してその馬の出走データ (せいぜい数十件、しかも連続していることがわかっている) を抽出するには100回前後のデータアクセスで終わると推定できます。 これに対し、INDEXがない時は結局、全件を舐めまわすと考えれば その違いは明らかでしょう。
INDEXを作ってもDBがそれを自動的に利用するかどうかはDBごとに異な るようですし、特定のINDEXを強制的に使う場合の、SQL文の書き方が 全てのDBで同じとも限りませんのでこれらは自身で使用されているDB について調べてみてください。 まずはINDEXを作成して、検索を実行してみることですね。 SQL文は単純なのでDBのオプティマイザ(最適化機能)が働いて自動的 に組み込んで使うと思いますが、確証はありません。 私自身も自分で使っているDB以外は知りませんし、詳しく知っている わけでもありませんのでこの辺で…。
以上、参考になさってください。
「はすめますて(^_^) 」さんは、DB初心者ながらも自身でDBを構築し 80万件のデータ取り込みまでなさったようですからDBまわりの知識を ゆっくりと習得されるとよいですね。 |
|
タイトル | : Re^4: 馬毎SEデーターの検索速度 |
記事No | : 2321 |
投稿日 | : 2010/02/22(Mon) 01:04 |
投稿者 | : はすめますて(^_^) |
|
通行人Aさん、その他の皆さん質問よろしくお願いします。 テーブル構造は、提供されているサンプルと、同じにしたつもりです。 現在わからない事は、(年+血統No)馬齢繰り返しで、馬毎レース情報(SE)から過 去の表示を行うと初回クエリが遅く タイムアウトが出てしまうんです。タイムアウト出さない為には、ユニークキ ー(年,月日,場,血統No)をSQLのINで 検索する様に、文字列作成すればよいとおもったのですが、血統Noから文字列 作成では同じかと思いました。 初回のクエリが遅くならない方法か、その他のよか方法ありましたら、ご教授 おねがいします。 |
|
タイトル | : Re^5: 馬毎SEデーターの検索速度 |
記事No | : 2322 |
投稿日 | : 2010/02/22(Mon) 22:50 |
投稿者 | : 通行人A |
|
通行人Aです > テーブル構造は、提供されているサンプルと、同じにしたつもりです。 とありますが、サンプル(MDB)のUMA_RACEと同じだとしたら 設定されているユニークキーをINDEXとして使用した場合、 まさに足を引っ張るそのものです。
KettoNumでINDEXを作成して実行したらとアドバイスしましたが どうもそのそぶりもないようなので私はこれで失礼… |
|
タイトル | : Re^6: 馬毎SEデーターの検索速度 |
記事No | : 2323 |
投稿日 | : 2010/02/23(Tue) 03:51 |
投稿者 | : はすめますて(^_^) |
|
KettoNumでINDEXを作成するには、どうしたらよいのでしょうか? よろしくお願いいたします。 |
|
タイトル | : Re^7: 馬毎SEデーターの検索速度 |
記事No | : 2324 |
投稿日 | : 2010/02/23(Tue) 13:48 |
投稿者 | : はすめますて(^_^) |
|
よく確認したら、PKしかありませんでした。 CREATE INDEX ******** で、PK+INDEXにしてから、試してみます。 通行人A 様。ご教授ありがとうございました。 |
|
タイトル | : Re^8: 馬毎SEデーターの検索速度 |
記事No | : 2325 |
投稿日 | : 2010/02/27(Sat) 15:05 |
投稿者 | : はすめますて(^_^) |
|
o(^-^)o超速くなりました。 通行人A様ご教授大変ありがとうございました。 また何かありましたら、よろしくお願いいたします。 m(__)m |
|
|
|
copyright ©2007 JRA SYSTEM SERVICE CO.,LTD. All Rights Reserved.
|
|
|