メインコンテンツへスキップ

インデックスの設定

コメント

25件のコメント

  • nkmt

    今の照会リンクBよりも上に、もう一つ照会リンクBを作り、上のBの項目Cで元々のBを照会リンクしてみるのはいかがですか?

  • ISHIJIMA

    データベースはSQL系・ISAM系のどちらですか?

  • Wujin

    ISHIJIMA様

    すみません。SQLserverです

  • Wujin

    nkmt様

    データテーブル上で
    B-Bリンク
    A-Bリンク
    とすればいいのでしょうか

  • nkmt

    このように解釈しました。
    メインソース Aテーブル
    照会リンク  Bテーブル(位置付け式 このテーブル自身の項目C)
    としているのだと解釈いたしました。
    ※自分自身の項目で位置付けというのは全くやった事ないです。

    それを
    メインソース Aテーブル
    追加の照会リンク  Bテーブル
    元々の照会リンク  Bテーブル(位置付け式 追加Bテーブルの項目C)
    とするのがいいのではないかと思いました。

  • ISHIJIMA

    メイン以外の項目で範囲を行うとどうしても遅くなることは仕方がないかと思います。

    方法としては下記方法が考えられます。(他にもあるかもですが)

    1.SQLコマンド等を利用して1つのテーブルとして定義する

    2.ビューを定義して1つのテーブルとする

    3.外部リンクを使用する

     

  • ISHIJIMA

    フォーラムの下記内容が参考になると思います。

    SQLコマンド – Magicユーザーズフォーラム (magicsoftware.co.jp)

  • nkmt

    照会リンクテーブルで範囲絞りが遅いのか、位置付けが遅いのかどちらなんでしょうね。

  • nkmt

    範囲絞りの話なら、照会リンクBテーブルを外部リンクに変えるのも速度向上に繋がるでしょうね。
    もしそうなら私の昨日までの書き込みは全て無視してください。

  • Wujin

    nkmt様 ISHIJIMA様

    レスありがとうございます。

    nkmt様

    位置づけと書きましたが、範囲付けです。

    Bテーブルのcカラムで、文字列「DDD」を範囲付けしたいのですが

    この処理が遅いということです。説明不足で申し訳けありません。

     

    ISHIJAMA様

    マニュアル等見てみましたが、ビューの定義をして一つのテーブルとするというのがわかりませんでした。

    自分でももう少し調べてみます。

     

    データビュー上でメインテーブルに照会リンクをつけるのは、外部リンクという認識でしたが

    そうではないのですね。。。

     

  • ISHIJIMA

    Microsoft SQL Server Management Studio等でビューを作成するという事です。

    SQL文を知らなくてもある程度はできますよ

  • nkmt

    照会リンクは都度都度SELECTが発行されるけど
    外部リンクは、SQL Server側でJOINが済ませた状態になると思います。
    外部リンクはSELECT文の発行回数が少ないと思います。
    速度向上を期待出来る場合があると思います。

    メインソース(テーブルA)のデータ件数はどのくらいなのでしょうか?


  • Wujin

    ISHIJIMA様

    >Microsoft SQL Server Management Studio等でビューを作成するという事です

     

    やってみます。

     

    nkmt様

     

    データ件数は何万件かあると思います。日々増えています。

     

  • nkmt

    リンクテーブルの項目Cでも絞り込みますが
    メインソースの項目でも絞り込めるといいんでしょうけどね。

  • kitabayashi

    ・Bテーブルを外部リンクして、位置づけのみ。
    ・Bテーブルのcカラムに対する範囲指定は、DB SQLまたはMagic SQLで行う。
    の設定でどうでしょうか。

  • tanda

    Takeiさん

    1対N(複数)のリンクを張ろうとされているのでしたら、照会リンクを用いるより、サブフォームを使った階層構造のタスクにするほうがいいですよ。照会リンクは1対1の関連付けを行うための機能ですから、複数のレコードに対してリンクを張るには適していないです。

    サブフォームという機能を用いれば、1対Nの関連付けを1画面で実現することが可能です。

  • nkmt

    kitabayashiさん>
    データビューでの範囲絞りでは、From~To範囲指定の時はよく使いますが
    私はDB SQL や Magic SQL はあまり使用しておりません。
    ここだとFrom~To以外も指定出来ますし、tandaさんが以下で言われてますように
    https://muforum.magicsoftware.co.jp/hc/ja/community/posts/7257410711577
    DBカラム名の指定が不要になる以外にも速度向上にも役立つのでしょうね。


  • Wujin

    細かい説明が不足していました。

    申し訳ありません。

     

    使用テーブル

    Aテーブル カラム  e、f、g  ==>メインテーブル

    Bテーブル カラム b、c、h  ==>照会テーブル(実際は照会テーブルは他にも有り)

     

    下記のようなフォームにしています。(グリッド状)

    A.e、A.f、A,g、B.b、B.c、B.h

    フォームのフィルタリング機能でB.cカラムのDDDという値で

    範囲付けすると遅いということです。

    (当然通常の範囲付けでも遅いですが)

  • Pu

    こんにちはPuです。
    joinかけるTABLE Aに絞り込み条件がなくて join相手のTABLE Bにしか絞り込み条件がない場合
    (項目 Cのみで抽出)
    全件joinが掛かる(ビューを定義しても同じ)のでデータ件数が多くなればなるほど遅くなります
    少しでもTABLE Aに絞り込み条件がありかつTABLE B の条件(項目 C)でjoinすれば早くなりますけど
    でわ~でわ~

  • tanda

    Puさんが言われる通りですね。毎回、全件検索になりますので遅くなりますね。

  • ISHIJIMA

    メインテーブルにない項目の場合は基本的には遅くなりますよね

    あとは照会リンクではなく外部リンクとかSQLコマンドとかビューとかで

    多少なりとも改善する等でしょうか

    メンテナンス性等いろいろな事を考える何が最適かですね

    あとはデータベースで最適なキーを追加して少しでも早くするかですよね

    お金があれば機器の性能も・・・

     

     

  • Wujin

    皆様ありがとうございます。

     

    ビューを試しましたが、範囲付けはレスポンスは早くなりました。

    簡易的なテーブルで試したので、リンクが多ければ遅いのかもしれませんが

    (インデックスを追加して変換処理の最後でエラーが出ました。。。

    ・・・のオブジェクトは既にあります、、みたいな)

     

    外部リンクも今のプログラムで変えてみましたが、レスポンスが速くなりました。

     

    ひとまずは外部リンクで対応したいと思います。

    テーブルの構成も見直しが必要かもしれません。

     

    使用歴がMagicはV8からいきなりxpaになったので、基本がないとつらいな、、、と思いました。

    (dbもpervasiveでまったくいじりませんでしたし)

     

    勉強になりました。ありがとうございました。

  • nkmt

    > テーブルの構成も見直しが必要かもしれません。
    正規化には反しますが、私は
    売上鑑データの項目である得意先コード、売上日、営業担当者コードなどのレプリカ値を
    売上明細データにも保持しています。
    良し悪しあると思いますが。

  • ISHIJIMA

    なかなか難しいところですね

    レスポンスを最重視するのであればやはり項目を持つしかないのかな・・・・

     

  • nkmt

    ISHIJIMAさん お世話になっております。
    今回の質問者様もそうでしたが、Magicの普通の作りで大量件数で照会リンクの項目で絞ると遅いので、鑑の項目を明細にも保持する非正規化を取りがちです。
    外部リンクにすると速度向上が見込まれる場合もありますし、ビューやSQLコマンド、DBSQL、Magic SQL等を使うとどうなのかとか、Pervasiveならどうなのかとかいろいろありますね。

サインインしてコメントを残してください。