5万件の商品マスタ検索について
環境 SQLサーバー2019
Magicバージョン XPA4.6
客先の商品csvをインポートして商品マスタ5万件を表示したところ
明細表示までに2秒弱かかります。(単体テストのときは50件程度のため直ぐ表示されました)
明細表示タスクでPgdown、Pgupもカクカクします。
社内テストでも客先サーバーでも同様に遅くとても納品できる状態でありません。
プログラム構造としては 親タクス 商品名フィールド like文で子タスク明細行を表示
している。ごく普通の検索プログラムです。
パラーメータや範囲式をすべて取り払っても動きがおそいです。
APG実行で表示すると、すぐ表示されます。
親子タスクのプログラムに問題があるのでしょうか?
-
いつもありがとうございます。
違いは、APGは、1つのタスク、
商品マスタ検索は、親タスク 商品名検索用 変数フィールド
子タスク 商品マスタDBの表示明細フィールド
親子2つのタスクです。(キャッシュなし)
親子タスクの場合に遅いと思われます。
-
明細タスク キャッシュありにしても遅さはかわりません。
Pgddwn pgup 2秒以上すぎてから次頁、前頁が表示されます。
いったん、明細タスクのテーブルコントロールを削除して
再定義(商品コード、商品名のみ)しても遅いです。
Pgddwn pgup 2秒以上すぎてから
表示されます。
-
「商品名検索」とありますが、検索文字列は部分一致でしょうか、先頭一致でしょうか?部分一致でしたらインデックスが使えませんので、何をするにも毎回、全件レコード総なめ検索になりますよ。
Google検索とかで検索が速いのは、Google社が外部の特殊なインデックスを使用しているからです。
-
下記 範囲のSQL WHERE句をはずしたところ
Pgddwn pgup は、件数が少ない場合にくらべて多少もたつきますが
多少改善されました
MAGIC SQL句
sho.商品名 LIKE ('*'&Trim(画面.商品名)&'*')
↑ NGと思います。画面.商品名スペースの場合
MagicSQL句を無視できるとよいのですが...
-
それだと完全に部分一致検索の構図になります。部分一致検索ではインデックスが使えませんよ。
-
magic sql like文は、全て検索するのでNG
現在 SQLコマンドにしたところ改善されましたのでこの方向でいきます。
親子タスクの関係は、タスクをAPGにしましたが条件設定まではやっておりません。
申し訳ありません。
最初の画面表示にかかる時間、スクロールの遅さは、MagicSQLが最大の原因としています。
-
いつもありがとうございます。
MagicSQLでCndRange関数ですとチェックエラーとなります。
検索指定なしのときにLIKE分が回避できるとたすかるのですが...
-
いつもおせわになります。
明細タスク
メインソース 商品マスタ
表示.商品名 L=論理 代入 SHM商品名 LIKE ('*'&Trim(画面.商品名)&'*')
SHM商品名 範囲 CndRange(画面.商品名<>'','TRUE'LOG) または
←CndRangeは、値でないとチェックでエラーとなります。
またはCndRange(画面.商品名<>'',表示.商品名) 同様です。
わたしのコーディングが的外れかもしれませんが...
-
何度もありがとうございます。参考にさせていただきます。
magicSQLは、疑似的にSQLコマンド発行のためSQLコマンドに比べて遅いということです。
過去にXPA3.XのMAGICSQLのLIKE文(2万件)でもたつくことはなかったのですが・・
現在、他の検索プログラムもSQLコマンドの方向で検討中です。
-
しいて言うと
商品名のほかに
実は、型式名、備考名、メモ欄も 「AND LIKE文」にしています。
あと考えられるのは、テーブルコントロールが若干重い気がします。
4.6では、ラインモードでチェックボックスあり、Pgdwon、PgUPするとチェックボックスの
残像が残ります。パッチがくるまであきらめています。
-
いーさぽへ調査依頼したところ単なる私の環境設定ミスです。
当初テーブルコントロールを疑っておりましたが
MagicSQLのレスポンスに問題はありませんでした。
おさがわして申し訳ありません。
3種類の検索方法があるようです。
SQLコマンド
DBSQL
MAGICSQL
上記3種類がありますがメンテナンスを考慮しながら
使い分けるとよいかもしれません。まだDBSQLは、ためしていません。
-
データーベース 『MSSQL』複数あるので
F4:行追加 『MSSQL2』
データベース特性 → SQLの設定
本来 「LimitLink...ONLINE_ARRAY..」 となりますが
空白でありました。
必ずぬけがでる危険性があります。 ↑ONLINE_ARRAY..」意味はわかりませんが..
サインインしてコメントを残してください。
コメント
12件のコメント