可以在第一個但不是第二個中使用OPTION(HASH GROUP)。我如何在第二個包含OPTION(HASH GROUP)?在派生表中不接受選項(散列組)
SELECT
count(*) as 'match'
FROM [docSVenum1] with (nolock)
INNER LOOP JOIN [FTSindexWordOnce] as w1 with (NOLOCK, FORCESEEK)
ON [docSVenum1].sID = w1.[sID] and [docSVenum1].[enumID] = '142'
INNER HASH JOIN [FTSindexWordOnce] as w2 with (NOLOCK)
ON w1.wordID = w2.wordID and w2.[sID] = '2'
GROUP BY W1.[sID]
OPTION (HASH GROUP)
select max(list.match) as 'max'
from
(
SELECT
count(*) as 'match'
FROM [docSVenum1] with (nolock)
INNER LOOP JOIN [FTSindexWordOnce] as w1 with (NOLOCK, FORCESEEK)
ON [docSVenum1].sID = w1.[sID] and [docSVenum1].[enumID] = '142'
INNER HASH JOIN [FTSindexWordOnce] as w2 with (NOLOCK)
ON w1.wordID = w2.wordID and w2.[sID] = '2'
GROUP BY W1.[sID]
-- OPTION (HASH GROUP)
) as list;
在現實生活中充滿查詢會更喜歡這個
select max(list.match) as 'max'
from
(
SELECT 200*count(*)/([d1].[textSize] + [d2].[textSize]) as 'match'
FROM [docSVenum1] with (nolock)
INNER LOOP JOIN [FTSindexWordOnce] as w1 with (NOLOCK, FORCESEEK)
ON [docSVenum1].sID = w1.[sID] and [docSVenum1].[enumID] = '142'
INNER HASH JOIN [FTSindexWordOnce] as w2 with (NOLOCK)
ON w1.wordID = w2.wordID and w2.[sID] = '2'
JOIN docSVsys as d1 with (nolock)
on d1.sID = w1.sID
JOIN docSVsys as d2 with (nolock)
on d2.sID = w1.sID
GROUP BY W1.[sID], [d1].[textSize], [d2].[textSize]
-- OPTION (HASH GROUP)
) as list;
什麼是您的SQL Server 2008版本? [我在SQL Server 2012測試版中發現了這個錯誤](https://connect.microsoft.com/SQLServer/feedback/details/615767/denali-engine-regression-in-query-hint-behavior),但問題可能有也存在於2008/2008 R2的早期版本中。如果在'as list'後添加選項,該提示是否也能正確應用? – 2012-07-25 15:27:18
的Microsoft SQL Server 2008 R2(RTM) - 10.50.1617.0(X64)在Windows \t 2011年4月22日19點23分43秒 \t版權所有(c)Microsoft公司 \t標準版(64位)NT 6.0(建設6002:Service Pack 2) –
Paparazzi
2012-07-25 15:41:41
@AaronBertrand如果我試着把它放在列表後面,我也會得到一個語法錯誤。 – Paparazzi 2012-07-25 15:44:41