Tenho a seguinte consulta SQL:
declare @p1 INT = 20240703;
declare @p2 INT = 20240703;
declare @p3 NVARCHAR(50) = N'USA';
SELECT R.taxareaid, R.filtertypes
FROM region R
JOIN country C ON R.countryid = C.countryid
where C.name = @p3
and R.effdate <= @p1 AND R.expdate >= @p2
ORDER BY R.taxareaid
OPTION (RECOMPILE);
https://www.brentozar.com/pastetheplan/?id=B1FTNkXHkx
CREATE TABLE [dbo].[Region](
[regionId] [numeric](18, 0) NOT NULL,
[taxAreaId] [numeric](18, 0) NOT NULL,
[effDate] [numeric](8, 0) NOT NULL,
[expDate] [numeric](8, 0) NOT NULL,
[countryId] [numeric](18, 0) NOT NULL,
[mainDivisionId] [numeric](18, 0) NOT NULL,
[subDivisionId] [numeric](18, 0) NOT NULL,
[cityId] [numeric](18, 0) NOT NULL,
[postalCodeId] [numeric](18, 0) NOT NULL,
[cityCompressedId] [numeric](18, 0) NOT NULL,
[subDivCompressedId] [numeric](18, 0) NOT NULL,
[filterTypes] [numeric](32, 0) NOT NULL,
[updateId] [numeric](18, 0) NOT NULL,
CONSTRAINT pk_region PRIMARY KEY CLUSTERED
(
[regionId] ASC
)
Problema:
Estimativas do Plano de Execução : Quando olho para o plano de execução, percebo que as estimativas são muito menores do que as linhas realmente processadas. Embora eu esteja usando
OPTION (RECOMPILE)
para evitar a detecção de parâmetros, ainda não estou obtendo estimativas precisas. Também atualizei as estatísticas naregion
tabela usando uma varredura completa, mas as estimativas ainda estão incorretas.Vazamento no TempDB : a consulta está causando um vazamento no TempDB durante a classificação.
O que eu tentei:
- Estatísticas atualizadas : executei uma verificação completa para atualizar as estatísticas na
region
tabela. - Índices : criei um índice em
region(taxareaid)
e um índice composto em(countryid, effdate, expdate, taxareaid)
, mas ainda estou vendo classificação no plano de execução.
Minhas perguntas:
- Como posso obter estimativas mais precisas do plano de execução para evitar o vazamento do TempDB durante a classificação?
- Como posso evitar a operação de classificação completamente? Existem outras estratégias que eu possa tentar, já que a indexação não parece resolver o problema?