処理速度を早くするには?


Ken  2004-10-29 19:38:51  No: 117270

VBでSQLサーバのデータベースからデータを集計して表示させて
いますが、データ件数が200万件程あるためか集計が終わるまでに
40分ぐらいかかります。一応インデックスをはってみたら10分ぐら
いには縮まりましたが他にはもう速度をあげる方法はないのでしょうか?

ご存知の方いらっしゃいましたら宜しくお願いします。


葉月  2004-10-29 19:51:18  No: 117271

速くする方法いわれても
汝の環境・仕様等0%の把握で何を答えろというのですか?
質問の仕方というか内容がまったくもっておかしいと思います
しいていうなら・・・
何も計算しなければ即終わります・・・

あとはSQLの抽出等にどれくらいの時間がかかるとかは調べましたか?
SQLserverならクエリアナライザで調べられます
そーゆー事をやったかどうか程度は返答くださいね

たぶん外部から言えるのはその程度


raki  URL  2004-10-29 19:58:39  No: 117272

VB側で行っている処理の中で、ストアド化できるものは
ストアドにしてしまうとか。


Ken  2004-10-29 20:24:39  No: 117273

クエリアナライザで実行してもやはり10分程はかかってしまいます。
抽象的な質問の仕方で申し訳ございませんでした。環境や仕様とはPC
の性能のことですか?

rakiさんのおっしゃる通り、ストアド化できるものは全てストアド化
してあります。


葉月  2004-10-29 20:28:04  No: 117274

ただのSQLの発行に10分ですか?
まぁ件数が件数なだけに一概に言えないですが
SQLまずいかもしれませんよ

支障がなければここにSQLを書いていただければ
何か解決するかもしれませんよ
SQLも書き方次第で数秒のものも10分以上かかるようなものになりますから

クエリアナライザで10分で
処理に10分ならば
VB自体はほとんど負荷がかかっていないということでしょうし


葉月  2004-10-29 20:30:41  No: 117275

ちなみに環境うんぬんぬついて・・・

あなたが客観的に同じ質問を受けたら
どう答えます?
あなたの仕事だから仕様は把握してるでしょうが
周囲はマシン環境も開発環境も
ましてやVBでどんな処理をして
どんなデータをどのように抽出して
何が重くて・・・

全てにおいてわからないのですが・・・


Ken  2004-10-29 20:49:23  No: 117276

SQLはこんな感じですが、ストアド化してあるのでVBとは異なる
部分もあります。
r_レジ売買Hテーブルの件数が200万件ほどです。
----------------------------------------------------------
  insert into #一時テーブル 
  (予約日付, 商品コード, 数量の合計, 会員コード, 性別, 生年月日, 非会員扱い, 税抜金額の合計)
  select  @予約日付, @商品コード, @数量の合計, @会員コード, @性別, @生年月日, @非会員扱い
  , Sum(rh.税抜金額) AS 税抜金額合計
  FROM r_レジ売買Hテーブル rh
  WHERE rh.会員コード=@会員コード
  AND rh.売買日付>=@開始年月日
  AND rh.売買日付<=@終了年月日
  AND rh.売買区分='1'
  and rh.本部コード=1


Ken  2004-10-29 22:29:28  No: 117277

SQLの発行だけで10分という訳ではありませんでした。
そのSQLを以下の様にループしているので処理に時間が
かかってしまっているようでした。

VBの問題でないのならここへ質問するべきではないと思いますので
もう少しまた調査してみます。色々ご回答いただきましてありがとう
ございました。

while(@@fetch_status = 0)
begin
  
  select @mDate = convert(datetime, @予約日付, 111)
  select @mDateW = DateAdd(day, 0, @mDate)
  select @終了年月日 = convert(char(10), @mDateW,  111)
  select @mDateW = DateAdd(day, 1, @mDate)
  select @mDate = DateAdd(year, -1, @mDateW)
  select @開始年月日 = convert(char(10), @mDate,  111)

  insert into #一時テーブル 
  (予約日付, 商品コード, 数量の合計, 会員コード, 性別, 生年月日, 非会員扱い, 税抜金額の合計)
  select  @予約日付, @商品コード, @数量の合計, @会員コード, @性別, @生年月日, @非会員扱い
  , Sum(rh.税抜金額) AS 税抜金額合計
  FROM r_レジ売買Hテーブル rh
  WHERE rh.会員コード=@会員コード
  AND rh.売買日付>=@開始年月日
  AND rh.売買日付<=@終了年月日
  AND rh.売買区分='1'
  and rh.本部コード=1

fetch 会員カーソル into
@予約日付, @商品コード, @数量の合計, @会員コード, @性別, @生年月日, @非会員扱い

end


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加