SQL音痴だな私、情けない
直近売上:current_uriage(10万行)
過去売上:old_uriage(500万行)
先日、初めて作ったAccess + PostgreSQL「仕入用FAX発注」プログラム
これに商品コード+[1ヶ月][2ヶ月][3ヶ月][半年][1年][2年]
の販売明細ボタンを追加した。
このプログラム、
遅すぎでダメみたい(泣)
私のSQL(=まず最初、対象レコードを減らす)
1:currentとoldをunion連結したview作成(対象数:510万行)
2:対象レコードが多すぎるので、このviewを売上dateで降順しtop 200000
3:完成view_all_uriage_top200kの20万行に対し、SQL文を動的作成・実行
select * from view_all_uriage_top200k where itemcd=’999999′ and day_uriage > ‘yyyymmdd’)
この実行が毎回20秒以上!
イライラ
友人のSQLプロを呑みに誘い、なんでと聞くと
プロ:それは、当然だね!
sort実行のため全レコードを読む必要が生じる!
20万行の限定は逆効果
私:そうなの?
510万を20万にしたんだよ?
プロ:sort無しの UNION view 作って、whereで商品コードと日付で取ればいい。
両方index項目だから、対象レコードは最小になる
私:本当に?
vbaを書き換えると・・・・
私:あら、本当だ!
一瞬でリストが表れた(衝撃)
私のSQL知識、ダメ過ぎ!
よく考えたらvba本はいっぱい読んだが、SQL本は読んだこと無い!
改めて、SQL本をいろいろ読まないとダメみたい!
死ぬまで勉強ね