0

odbcを介してx++から非axテーブル(少なくとも部分的に)に対して実行されるsql-queryがあります。sql-query-execution-planは、参照するax-tableにインデックスを追加することを提案します。例:

CREATE NONCLUSTERED INDEX [] ON [([field1])INCLUDE([several fields])

ax-tablesのmanagement-studioを介してこれらのインデックスを作成するのは良い考えではなかったことを覚えていますが、axを介してそのようなインデックスを作成するにはどうすればよいですか?includeブロックのフィールドは、単にフィールドリストに追加する必要がありますか?

別のインデックスヒントはもっと簡単なものでした:

CREATE NONCLUSTERED INDEX [] ON []([field1]、[field2])

ただし、関連テーブルと名前付きフィールドのaxにこのインデックスを作成する場合でも、クエリアナライザはこのインデックスを作成することを提案します。

sql managmement-studioでこのインデックスのcreate-statementを表示すると、dataAreaID-columnが(自動的に)含まれます。

ヒントはありますか?前もって感謝します!


コメントへの回答:

これは、x++から実行されるSQLクエリです。使用されるテーブルは部分的にax-tablesであり、部分的にそうではありません。欠落していると思われる唯一のインデックスは、ax-table上のインデックスです。

インデックスの最適化については一般的に説明したくありませんでしたが、最初の「create-index-query」の「include ...」部分を表すインデックスをaxに追加する可能性があるかどうかを尋ねてください!

axの外部のクエリでDAID列を考慮するという事実を確かに知っています-実際にはこのインデックスがすでに存在しているのに(DAIDに関して)、management-studioがfieldA+fieldBの欠落しているインデックスを批判していることに驚いています。

ありがとう4返信!

4

2 に答える 2

0

fieldA + fieldBが示唆されているという事実は、クエリでDataAreaIdが選択されていないことを示しています。

AXは、常にDataAreaIdをインデックスの最初のフィールドとして追加します。

また、SQLクエリを分析して、[管理]/[クエリ]/[データベースステートメント]の[実行プラン]ダイアログにSQLを配置することで実行プランを取得できます...

これは、どのインデックスが使用されているかを示します。

于 2010-07-08T15:11:13.333 に答える
0

私は同様の懸念を持っていました。AX テーブルにインクルードを使用してインデックスを作成する方法を示す記事を次に示します。

基本的に、X++ コードから SQL インデックスを作成します。

public static server void createSQLIndexPointTransferHeader()

Connection connection = new Connection();
Statemetn statement = connection.createStatement();
SqlStatementExecutionPermission sqlStatementExecutionPermission;
str createIndexSQL;
;
//Create the index
createIndexSQL = @"IF EXISTS (SELECT * FROM sys.Indexes WHERE onject_id=(N'[dbo].[LIO_POINTTRANSHEADER]) AND name=N'I_NEWWINECLUBCARD_IDX')

DROP INDEX [I_NEWWINECLUBCARD_IDX] ON [dbo].[LIO_POINTTRANSHEADER] WITH (ONLINE=OFF)
CREATE NONCLUSTEREDINDEX INDEX [I_NEWWINECLUBCARD_IDX] ON [dbo].[LIO_POINTTRANSHEADER]
(
[WINECLUBCARDID]
)
INCLUDE ([FIELD1],[FIELD2]/*OTHER FIELDS*/) WITH (PAD_INDEX=OFF /* OTHER WITH OPTIONS*/);

sqlStatementExecutionPermission = new SqlStatementPermission(createIndexSQL);
sqlStatementExecutionPermission .assert;

//BP Deviation Documented
statement.executeUpdate(createIndexSQL);
CodeAccessPermission::revertAssert();

... 特定の要件に合わせて更新される実際のインデックス テキスト。

http://daxdilip.blogspot.com/2011/05/tip-how-to-avoid-overriding-of-sql.html

于 2012-09-05T09:29:11.507 に答える