SQLコマンド
アホなPGを作っていたのでつぶやきます。
集計もせず、受注明細データをメインに表示して、得意先マスタ、現場マスタ、商品マスタなどから名称を参照し、表示するだけのオンラインタスクなのに、SQLコマンドでSELECT JOINして、変数定義して受け取って画面表示していたので、改造を機会にこのPGは普通のメインソースと照会リンクへ置き換えました。
-
メインソースに置き換えたPGで実行してみましたが、遅くて使い物になりませんでした。
原因は、メインソースにする受注明細データには範囲絞り込みに最適なインデックスが無いのも理由なようです。
照会リンク 4本を外部リンクにしても速度は遅かったです。
おそらく作った当時も普通の作りでは耐えられずに、SQLコマンド化したのだと思います。
ソースにコメントを残しておこうと思います。 -
メインソースにする受注明細データには範囲絞り込みに最適なインデックスが無いのが理由というのは嘘でした。メインソースにした受注明細データには、受注日を持っておらず、そもそもメインソースの項目での絞り込みが出来ない状況でした。Magicの普通の作りでは正規化し過ぎるのはNGで、売上明細データにも鑑項目の売上日や得意先コードを持つなど、ある程度は項目の冗長化は必要だなと思いました。
-
ISHIJIMAさん レスありがとうございます。
ビューを作って保存した後、
Magicのデータリポジトリのデータソース名にビューの名前を書いて
F9 定義取得してみたら
定義内容が一致していませんになりました。
午前中は外出するので、また午後にでも探ってみます。 -
全然別のシステムでF9 定義取得してました。
-
正しいシステムで定義取得が出来ました。
ビューを作って、ビューを定義取得するのは私は初めてでした。
定義取得した項目には、「モデル」を割り当てる必要もないのかもしれませんが
割り当てた方がクロスリファレンスにもひっかかるメリットがあるでしょうね。
ビューの分を例のオンラインタスクに使ってみて速度が出るか確認してみます。
もしGoodであれば製造工数は減るような気がしましたが
ビューを定義取得したデータをオンラインタスクのメインソースにして
StringDate型の日付範囲絞りが今の所成功していません。 -
そもそも定義取得して、APGでデータも読めませんでした。
Magic側でデータにインデックスを追記したらAPGでデータを読めました。
失礼しました。
オンラインタスクでStringDate型の日付範囲絞りもできました。
今朝はこれぐらいにしておきます。 -
こんにちはPuです
速度と便利さを分けて考えないとダメですよ
ビューにしたから早くなったなんてないです、ビューは単なるSELECT文ですので
ビューを開く度にSELECT文が発行されるだけなので、SELECTと同じ速度です。
毎回多様するSELECT文があるならビューを定義すると便利で使いまわしが出来る
またビューはUPDATE出来ないので、ユーザーに開放しても安全
そういう使い方が一般的で、高速化とは別です。
私の認識が違ってたらごめんなさい
でわ~でわ~ -
いつもお世話になっております。
Puさん ISHIJIMAさん レスありがとうございます。
今回の場合、メインソースの項目では絞り込みが出来ない分がMagicの標準の作りでは遅かったので、SQLコマンドでは速かったというのは体感しました。
ビューは私は初めて作りましたが、たしかにSELECTだのJOINとか何を私も理解しました。
ビューで代替した分でのテストには至っておりません。
(午前中外出して、午後はさっきまでZoomで県外のお客様と打合せをしておりました。)
ビューは別メンバーは使っているのを聞いた事があるので、場面に応じた使い分けをしていきたいと思います。 -
集計PGは、メインソース読みながらWFへ書き出しリンク等して加算するよりも
SQLコマンドが楽で、それよりも更に楽なのはビューなのかもしれないですね。
(やった事ありませんが。)
ビューへ 日付の範囲指定 とかできるのでしょうね。
(やった事ありませんが。) -
ビューでGROUPING集計などをしていないSELECTやJOINだけの分なら、値の変更が出来た感じがします。
-
こんにちはPuです
正しくは、結合(2つ以上のTABLE)されたVIEWに対してはUPDATE,INSERTできません
1つのTABLEでのVIEWに対しては更新可能です。
あまりMAGICで単独TABLEのVIEWを使用する頻度が少ないので
ついついVIEWは更新できないと書いてしましました。
でわ~でわ~ -
Puさん コメントありがとうございました。
サインインしてコメントを残してください。
コメント
12件のコメント