インデックスの設定
お世話になります。初歩的な質問で恐縮ですがお教えください。
AというテーブルにBというテーブルを照会リンクさせてフォームに表示させています。
フォーム上で位置付け及び範囲付けをする際にテーブルBにあるcというカラムを
指定すると位置づけ範囲付けの応答が遅くなります。(Aテーブルのカラムなら当然早いのですが、同じカラムを作りたくありません)
インデックスにBテーブルのカラムを指定することはできるのでしょうか。
(処理が速くなればそれでいいのですが)
-
今の照会リンクBよりも上に、もう一つ照会リンクBを作り、上のBの項目Cで元々のBを照会リンクしてみるのはいかがですか?
-
ISHIJIMA様
すみません。SQLserverです
-
nkmt様
データテーブル上で
B-Bリンク
A-Bリンク
とすればいいのでしょうか -
このように解釈しました。
メインソース Aテーブル
照会リンク Bテーブル(位置付け式 このテーブル自身の項目C)
としているのだと解釈いたしました。
※自分自身の項目で位置付けというのは全くやった事ないです。
それを
メインソース Aテーブル
追加の照会リンク Bテーブル
元々の照会リンク Bテーブル(位置付け式 追加Bテーブルの項目C)
とするのがいいのではないかと思いました。 -
照会リンクテーブルで範囲絞りが遅いのか、位置付けが遅いのかどちらなんでしょうね。
-
範囲絞りの話なら、照会リンクBテーブルを外部リンクに変えるのも速度向上に繋がるでしょうね。
もしそうなら私の昨日までの書き込みは全て無視してください。 -
nkmt様 ISHIJIMA様
レスありがとうございます。
nkmt様
位置づけと書きましたが、範囲付けです。
Bテーブルのcカラムで、文字列「DDD」を範囲付けしたいのですが
この処理が遅いということです。説明不足で申し訳けありません。
ISHIJAMA様
マニュアル等見てみましたが、ビューの定義をして一つのテーブルとするというのがわかりませんでした。
自分でももう少し調べてみます。
データビュー上でメインテーブルに照会リンクをつけるのは、外部リンクという認識でしたが
そうではないのですね。。。
-
照会リンクは都度都度SELECTが発行されるけど
外部リンクは、SQL Server側でJOINが済ませた状態になると思います。
外部リンクはSELECT文の発行回数が少ないと思います。
速度向上を期待出来る場合があると思います。
メインソース(テーブルA)のデータ件数はどのくらいなのでしょうか? -
ISHIJIMA様
>Microsoft SQL Server Management Studio等でビューを作成するという事です
やってみます。
nkmt様
データ件数は何万件かあると思います。日々増えています。
-
リンクテーブルの項目Cでも絞り込みますが
メインソースの項目でも絞り込めるといいんでしょうけどね。 -
・Bテーブルを外部リンクして、位置づけのみ。
・Bテーブルのcカラムに対する範囲指定は、DB SQLまたはMagic SQLで行う。
の設定でどうでしょうか。 -
Takeiさん
1対N(複数)のリンクを張ろうとされているのでしたら、照会リンクを用いるより、サブフォームを使った階層構造のタスクにするほうがいいですよ。照会リンクは1対1の関連付けを行うための機能ですから、複数のレコードに対してリンクを張るには適していないです。
サブフォームという機能を用いれば、1対Nの関連付けを1画面で実現することが可能です。 -
kitabayashiさん>
データビューでの範囲絞りでは、From~To範囲指定の時はよく使いますが
私はDB SQL や Magic SQL はあまり使用しておりません。
ここだとFrom~To以外も指定出来ますし、tandaさんが以下で言われてますように
https://muforum.magicsoftware.co.jp/hc/ja/community/posts/7257410711577
DBカラム名の指定が不要になる以外にも速度向上にも役立つのでしょうね。 -
細かい説明が不足していました。
申し訳ありません。
使用テーブル
Aテーブル カラム e、f、g ==>メインテーブル
Bテーブル カラム b、c、h ==>照会テーブル(実際は照会テーブルは他にも有り)
下記のようなフォームにしています。(グリッド状)
A.e、A.f、A,g、B.b、B.c、B.h
:
:
フォームのフィルタリング機能でB.cカラムのDDDという値で
範囲付けすると遅いということです。
(当然通常の範囲付けでも遅いですが)
-
こんにちはPuです。
joinかけるTABLE Aに絞り込み条件がなくて join相手のTABLE Bにしか絞り込み条件がない場合
(項目 Cのみで抽出)
全件joinが掛かる(ビューを定義しても同じ)のでデータ件数が多くなればなるほど遅くなります
少しでもTABLE Aに絞り込み条件がありかつTABLE B の条件(項目 C)でjoinすれば早くなりますけど
でわ~でわ~ -
Puさんが言われる通りですね。毎回、全件検索になりますので遅くなりますね。
-
皆様ありがとうございます。
ビューを試しましたが、範囲付けはレスポンスは早くなりました。
簡易的なテーブルで試したので、リンクが多ければ遅いのかもしれませんが
(インデックスを追加して変換処理の最後でエラーが出ました。。。
・・・のオブジェクトは既にあります、、みたいな)
外部リンクも今のプログラムで変えてみましたが、レスポンスが速くなりました。
ひとまずは外部リンクで対応したいと思います。
テーブルの構成も見直しが必要かもしれません。
使用歴がMagicはV8からいきなりxpaになったので、基本がないとつらいな、、、と思いました。
(dbもpervasiveでまったくいじりませんでしたし)
勉強になりました。ありがとうございました。
-
> テーブルの構成も見直しが必要かもしれません。
正規化には反しますが、私は
売上鑑データの項目である得意先コード、売上日、営業担当者コードなどのレプリカ値を
売上明細データにも保持しています。
良し悪しあると思いますが。 -
ISHIJIMAさん お世話になっております。
今回の質問者様もそうでしたが、Magicの普通の作りで大量件数で照会リンクの項目で絞ると遅いので、鑑の項目を明細にも保持する非正規化を取りがちです。
外部リンクにすると速度向上が見込まれる場合もありますし、ビューやSQLコマンド、DBSQL、Magic SQL等を使うとどうなのかとか、Pervasiveならどうなのかとかいろいろありますね。
サインインしてコメントを残してください。
コメント
19件のコメント