É possível forçar uma consulta a usar uma junção adaptativa? A consulta em questão produz uma junção adaptativa quando executada como SELECT, mas quando executada como SELECT INTO, isso não ocorre.
Eu tenho uma consulta parametrizada que tem uma subconsulta que normalmente seleciona quase nenhuma linha (0 a 4), mas ocasionalmente escolhe 100k.
Acredito que esse seja exatamente o tipo de cenário para o qual uma junção adaptativa foi projetada, mas o SQL Server não escolhe isso como um plano de consulta.
Um plano de consulta de sempre hash-join destrói o servidor, então meu único recurso no momento é forçar a junção a ser loops aninhados e aceitar que solicitações individuais de pior caso levarão alguns segundos extras para serem executadas.
Eu tenho um banco de dados SQL do Azure em compatability 150
eBATCH_MODE_ON_ROWSTORE=1
Detalhes adicionais
Por algum motivo, paste-the-plan não acha que o XML para esta consulta é legítimo.
A consulta em questão é:
with
hashes as (select h.[ContactHash]
FROM HashTable h
join someTable p on h.id=p.id
group by [ContactHash]
having count(distinct key) >1
and count(distinct p.thing) between 1 and 20),
dupeContacts as
(select distinct c.key,c.ContactHash from someTable c
where c.[ContactHash] in (select t.[ContactHash] from hashes t ) and c.key = @id
)
insert into @MyTableVar
select * from dupeContacts
As duas tabelas envolvidas são semelhantes a:
HashTable (
int id ,
ContactHash varbinary(16)
) -- millions, typically 4:1 to someTable by ID
e
SomeTable (
int id Primary Key ,
varchar(100) thing
)
Como diz na documentação , a junção adaptativa atualmente suporta
SELECT
apenas instruções: