copy tables パターンが検知された場合の最適化をコントロールします。
| Always | 検知されたコピー用パターンは、GeneXus 内で定義された一意のインデックスがある場合もすべて最適化されます。 | | If no unique index | 検知されたパターンの新しいグループのベーステーブルに、GeneXus 内で一意のインデックス (主キーまたはキー候補) が定義されていない場合は、これらのパターンを最適化します。これが既定値です。 | | Never | コピー用パターンの検知は行われません。 | | Use Environment property value |
ほかのテーブルにコピーされるテーブルの情報を検知し、INSERT と SUBSELECT を生成してトラフィックの発生を防ぐという考えに基づいています。再編成プログラムでは、このコマンドが頻繁に使用されることがあります。
検知が必要なプログラミングパターンは次のとおりです:
For Each
[ where Condition ]
[ defined by Att1, Att2, … ]
New|XNew
&Var|Attribute=Attribute1
... ... ...
EndNew|EndXNew
EndFor
-
両方のテーブル (For Each および新規のベーステーブル) が同じ DBMS 上にある必要があります。たとえば、ローカルのテーブルとリモートのテーブルとの間で最適化することはできません。
-
この動作は、 [ Initialize not reference attribute ] プロパティに依存します。
- Yes に設定されている場合、SUBSELECT 実行時にベーステーブルの項目属性はすべて参照されます。
- No に設定されている場合、フィールドは null を許可しません。
-
割り当て元のフィールドは、各グループの上位に対応するベーステーブルに格納する必要があります。一方、割り当て先のターゲットフィールドは、 [ New|XNew ] グループのベーステーブルに格納する必要があります。
-
[ New|XNew ] グループには [ When Duplicate ] を含めることはできません。つまり、重複を管理する必要がありますが、管理しない場合、重複キーを受け入れる条件を定義する可能性を指定します。
-
DBMS は INSERT と SUBSELECT コマンドをサポートする必要があります。一部の DBMS はサポートしていますが、制限があります。たとえば ORACLE は、LongVarChar 項目属性 (ORACLE では TEXT) を参照していない場合に、このコマンドをサポートします。
-
値のオーバーフローを避けるため、ターゲットフィールドの長さはソースフィールド以上である必要があります。オーバーフローした場合、DBMS は一般的に、実行されるプロセス全体を中断します。GeneXus は、内部プロセスを切り捨てるか生成して中断を回避します。
-
Always に指定すると、生成したプログラムの実行時に重複したキーが追加される場合は、実行がキャンセルされます。
- 重要: 値に Never が指定されている場合、再編成の最適化が妨げられるため、パフォーマンスに影響が生じます。
このプロパティは、オブジェクトレベルにも存在します。指定された特定のオブジェクトにのみ適用されるオブジェクトプロパティとは異なり、モデルレベルのプロパティはモデル全体に適用されます。また、オブジェクトレベルのプロパティは、環境レベルで指定されたものに優先します。
このプロパティの変更を適用するには、 [ すべてリビルド ] を実行します。
オブジェクト: Procedure 対応しているプラットフォーム: Web (.NET、Java)
[ Initialize not referenced attributes ] プロパティ
|