06.03.2007, 16:04 | #1 |
Ищу людей. Дорого.
|
По совету Mazzy мы закрыли индекс BatchIdIdx конф ключом.. поскольку партии у нас не используются..
вот пример запроса Код: select forcePlaceholders forceSelectOrder firstOnly recId from inventDim index hint BatchIdIdx where inventDim.inventBatchId == inventBatch.inventBatchId join tableId from inventSum index hint DimIdIdx where inventSum.inventDimId == inventDim.inventDimId && inventSum.closed == NoYes::No && inventSum.itemId == inventBatch.itemId; Код: SELECT A.RECID,A.INVENTDIMID FROM INVENTDIM A ,INVENTSUM B(INDEX(I_174DIMIDIDX)) WHERE ((A.DATAAREAID='dat') AND (A.INVENTBATCHID=''))AND ((B.DATAAREAID='DAT') AND (((B.INVENTDIMID=A.INVENTDIMID) AND (B.CLOSED=0)) AND (B.ITEMID='0000005'))) OPTION(FAST 2,FORCE ORDER) В планах выполнения особой разницы не заметил Это с условием A.INVENTBATCHID='' Что посоветуете?? Код: 768268 1 |--Clustered Index Seek(OBJECT:([domoNew].[dbo].[INVENTDIM].[I_698DIMIDIDX] AS [A]), SEEK:([A].[DATAAREAID]='dat'), WHERE:([A].[INVENTBATCHID]='') ORDERED FORWARD) 21 4 3 Clustered Index Seek Clustered Index Seek OBJECT:([domoNew].[dbo].[INVENTDIM].[I_698DIMIDIDX] AS [A]), SEEK:([A].[DATAAREAID]='dat'), WHERE:([A].[INVENTBATCHID]='') ORDERED FORWARD [A].[INVENTBATCHID], [A].[INVENTDIMID], [A].[RECID] 23050.289 0.10497055 0.10497055 115 0.2099411 [A].[INVENTBATCHID], [A].[INVENTDIMID], [A].[RECID] NULL PLAN_ROW 0 1.0 Код: 768268 1 |--Clustered Index Seek(OBJECT:([domoNew].[dbo].[INVENTDIM].[I_698DIMIDIDX] AS [A]), SEEK:([A].[DATAAREAID]='dat') ORDERED FORWARD) 22 4 3 Clustered Index Seek Clustered Index Seek OBJECT:([domoNew].[dbo].[INVENTDIM].[I_698DIMIDIDX] AS [A]), SEEK:([A].[DATAAREAID]='dat') ORDERED FORWARD [A].[INVENTDIMID], [A].[RECID] 23050.289 0.10496621 0.10496621 115 0.20993242 [A].[INVENTDIMID], [A].[RECID] NULL PLAN_ROW 0 1.0 |
|
06.03.2007, 22:38 | #2 |
Участник
|
Цитата:
Ключ надо навесить и на поле inventDim.inventbatchID, и на индекс. Этого будет достаточно. См. InventDim::dimEnabledFieldList() |
|