SQL音痴:sortは最後なのね

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本をいろいろ読まないとダメみたい!

死ぬまで勉強ね

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA