2010-07-08 4 views
0

odbc를 통해 x ++에서 non-ax-table (적어도 부분적으로)에 대해 실행되는 sql-query가 있습니다. 는 SQL 쿼리 - 실행 - 계획은 참조 도끼 테이블에 인덱스를 추가하는 제안 예 :axapta-table에 인덱스 추가

CREATE 클러스터되지 않은 인덱스 [] [([필드 1]) INCLUDE ([여러 분야])

ON

ax-tables의 management-studio를 통해 이러한 인덱스를 만드는 것은 좋지 않았지만 도끼를 통해 인덱스를 만드는 방법은 기억 나십니까? include 블록의 필드를 단순히 필드 목록에 추가해야합니까?

다른 인덱스 힌트 쉽게 하나였다

CREATE NONCLUSTERED INDEX [] [] ON ([필드 1], [2 필드])

하지만에도 관련 테이블 AX이 인덱스를 생성 및 명명 된 필드 - 쿼리 분석기는 여전히이 인덱스를 만들 것을 제안합니다.

SQL managmement 스튜디오에서이 인덱스의 생성 문을 볼 수는 dataAreaID 열은 .... (자동)

어떤 힌트를 포함됩니까? 미리 감사드립니다. ! 의견에


대답은 :

는 X ++에서 실행되는 SQL 쿼리입니다. 사용 된 테이블은 부분적으로 도끼 테이블이며 부분적으로는 사용되지 않습니다. 누락 된 것으로 보이는 유일한 색인은 ax-table에있는 색인입니다.

일반적으로 인덱스 최적화에 대해 논의하고 싶지는 않지만, 첫 번째 "create-index-query"의 "include ..."부분을 나타내는 ax에 인덱스를 추가 할 수 있는지 물어보십시오!

도끼 외의 쿼리에서 DAID 열을 인식한다는 사실을 확실히 알고 있습니다. 관리 스튜디오가 실제로이 인덱스가 이미 존재할 때 fieldA + fieldB의 인덱스가 누락되었다고 비난 한 것에 놀랐습니다. DAID 자동).

감사합니다. 4 답장!

+1

이 무엇 : 비 도끼 테이블 ... 의뢰 한 도끼 테이블에 대해 실행 된 SQL 쿼리가. AX 테이블을 사용하고 있습니까? –

+0

dataAreaID- 열이 자동으로 포함됩니다. 예, 이것이 AX가 작동하는 방식입니다. Axes 외부에서 AX 테이블을 사용할 때는 명시 적으로 DataAreaId == "xxx"를 where 절에 지정해야합니다. –

+0

쿼리 코드를 보여 주시겠습니까? 추상적 인 계획에 대해 인덱스 최적화를 논의하는 것은 어렵습니다. –

답변

0

사실 fieldA + fieldB가 나타내는 사실은 쿼리에 DataAreaId 선택이 없음을 의미합니다.

AX는 항상 DataAreaId를 인덱스의 첫 번째 필드로 추가합니다.

은 또한 당신은

이 인덱스가 사용중인 것을 나타냅니다 ... 관리/문의/데이터베이스 문에서 실행 계획 대화 상자에서 SQL을 넣어 실행 계획을 얻으려면, 당신은 SQL 쿼리를 분석 할 수 있습니다.

0

나는 similirar 관심사가 있고, 여기 AX 표에 포함을 가진 색인을 만드는 방법을 보여주는 기사가있다.

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(); 

... 당신의 선택은 특정 요구 사항을 업데이트 할 실제 인덱스 텍스트 :

은 기본적으로 당신은 X ++ 코드에서 SQL 인덱스를 만들 수 있습니다.

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

관련 문제