2010-07-08 50 views
0

我有一個sql查詢,從x ++通過odbc針對非ax表(至少部分)執行。 的SQL查詢-執行計劃建議到索引添加到參照斧表,例如:將索引添加到axapta表

CREATE NONCLUSTERED INDEX [] ON [(FIELD1]) INCLUDE([幾個字段])

我記得通過ax-tables上的management-studio創建任何這些索引不是一個好主意,但是如何通過ax創建這樣的索引?應該將include塊中的字段簡單地添加到字段列表中?

另一個索引暗示是一個更簡單的一個:

CREATE NONCLUSTERED INDEX [] ON []([FIELD1],[FIELD2])

但即使創建該指數斧在關於表和指定的字段 - 查詢分析器仍建議創建此索引。

查看創建語句此指數在SQL managmement工作室,在dataAreaID列包括(自動)....

任何提示? 在此先感謝!


答案評論:

它是從X ++執行一個SQL查詢。所用的表格部分是ax表格,部分不是。 似乎缺少的唯一索引是ax-table上的索引。

我不想討論一般的索引優化,只是詢問是否有可能在ax中添加一個索引,代表第一個「create-index-query」的「include ...」部分!

我當然知道關於DAID列在ax以外的查詢的事實 - 我只是感到驚訝,管理工作室批評fieldA + fieldB缺少索引,實際上這個索引已經存在(關於DAID自動)。

謝謝4回覆!

+1

這是什麼:對非斧表...轉診斧表執行的SQL查詢。你是否使用AX表? – 2010-07-08 11:39:48

+0

dataAreaID-column包含(自動)。是的,這就是AX的運作方式。在AX的外部使用AX表時,應在您的where子句中顯式地使用DataAreaId ==「xxx」。 – 2010-07-08 11:42:02

+0

你能告訴你查詢代碼嗎?在抽象計劃上很難討論索引優化。 – 2010-07-08 11:43:15

回答

0

它提示fieldA + fieldB的事實表明,您沒有在查詢上選擇DataAreaId。

AX始終將DataAreaId添加爲索引中的第一個字段。

您也可以分析你的SQL查詢,通過把SQL在管理/諮詢/數據庫語句的執行計劃對話框,獲得一個執行計劃...

這將表明什麼指標都在使用。

0

我有一個similirar的關注,這裏是一篇文章,展示瞭如何在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(); 

...進行更新,以您的specfic要求實際指數文本。

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