VBでSQLサーバのデータベースからデータを集計して表示させて
いますが、データ件数が200万件程あるためか集計が終わるまでに
40分ぐらいかかります。一応インデックスをはってみたら10分ぐら
いには縮まりましたが他にはもう速度をあげる方法はないのでしょうか?
ご存知の方いらっしゃいましたら宜しくお願いします。
速くする方法いわれても
汝の環境・仕様等0%の把握で何を答えろというのですか?
質問の仕方というか内容がまったくもっておかしいと思います
しいていうなら・・・
何も計算しなければ即終わります・・・
あとはSQLの抽出等にどれくらいの時間がかかるとかは調べましたか?
SQLserverならクエリアナライザで調べられます
そーゆー事をやったかどうか程度は返答くださいね
たぶん外部から言えるのはその程度
VB側で行っている処理の中で、ストアド化できるものは
ストアドにしてしまうとか。
クエリアナライザで実行してもやはり10分程はかかってしまいます。
抽象的な質問の仕方で申し訳ございませんでした。環境や仕様とはPC
の性能のことですか?
rakiさんのおっしゃる通り、ストアド化できるものは全てストアド化
してあります。
ただのSQLの発行に10分ですか?
まぁ件数が件数なだけに一概に言えないですが
SQLまずいかもしれませんよ
支障がなければここにSQLを書いていただければ
何か解決するかもしれませんよ
SQLも書き方次第で数秒のものも10分以上かかるようなものになりますから
クエリアナライザで10分で
処理に10分ならば
VB自体はほとんど負荷がかかっていないということでしょうし
ちなみに環境うんぬんぬついて・・・
あなたが客観的に同じ質問を受けたら
どう答えます?
あなたの仕事だから仕様は把握してるでしょうが
周囲はマシン環境も開発環境も
ましてやVBでどんな処理をして
どんなデータをどのように抽出して
何が重くて・・・
全てにおいてわからないのですが・・・
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
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
ツイート | ![]() |