I 'm using sql changetracking to read changes on ax7.CPRPriceCPOStaging. Table has PK clustered key on 4 columns:
ALTER TABLE ax7.CPRPriceCPOStaging ADD CONSTRAINT [PK_Staging] PRIMARY KEY CLUSTERED ( [DATAAREAID] ASC, [PRODUCTVARIANTNUMBER] ASC, [VARIANTID] ASC, [FROMDATE] ASC )
So, I have this query:
SELECT ct.VariantID, ct.DATAAREAID, ct.FROMDATE, t.AMOUNT, t.[PRODUCTVARIANTNUMBER] FROM CHANGETABLE (CHANGES ax7.CPRPriceCPOStaging, 0) ct INNER JOIN ax7.CPRPriceCPOStaging t ON ct.DATAAREAID=t.DATAAREAID AND ct.[PRODUCTVARIANTNUMBER]=t.[PRODUCTVARIANTNUMBER] AND ct.VariantID=t.VARIANTID AND ct.FROMDATE=t.FROMDATE;
It is JOIN by clustered key. In query execution plan, after I read data from change tracking table, there is SORT operator at the end which sorts data by PK column order. It also creates spill to temp db and query is very slow. After that it perform index seek on "dbo.myTable", which is fine. How can I remove this sort from execution plan? Shouldn't be data from change_tracking table also sorted in the same order as PK is? Obviously not. How can I achieve that right sort order is returned from change tracking table or at least remove spill to temp db?
29062-executionplan.xml