Então, estou tentando obter alguns dados de uma instância do SQL Server 2008, a consulta é bastante simples em estrutura, mas tem um desempenho extremamente ruim, leva pouco menos de um minuto para recuperar um pouco mais de 1.000.000 linhas (do SSMS).
Aqui você pode ver o plano de execução.
Os dados destinam-se a fins estatísticos e a consulta está a ser utilizada a partir do R-Studio (através do RODBC ), ao consultar a partir deste ambiente as suas 'quebras' situam-se perto das 450.000 - 500.000 linhas. Acho que o RODBC está expirando em algum lugar perto da marca de 30 segundos ...
A pergunta
SELECT
cc.ReportID,
cc.ReportDate,
cc.UnitID,
cc.Callsign,
cc.SpeciesCode,
cc.ComName,
cc.CatchWeight,
cc.DayGrid,
cc.NightGrid,
cc.UnitEffortType,
cc.UnitEffort,
cc.Depth,
cc.ReportType,
cc.EffortDesc,
cc.LicenceUsed,
vn.ValidFrom,
vn.Nation,
vn.NationCode,
vg.GRT
FROM
vwVesselGRT vg
INNER JOIN vwVesselNationality vn ON vg.UnitID = vn.UnitID
INNER JOIN vwClientCatch cc ON vn.UnitID = cc.UnitID AND vn.ValidFrom <= cc.ReportDate AND vn.ValidTo > cc.ReportDate
WHERE
cc.ReportDate <= '2016-04-30'
Eu queria saber se alguém já experimentou tal problema. Devo tentar alterar a consulta ou abordar o lado R do problema? Posso não estar identificando o verdadeiro problema aqui, receio.
No SQL, quantas CPUs você tem para esse servidor? Qual é o seu
MAXDOP
limite de custo para paralelismo?Uma coisa que você pode fazer para verificar se seu limite de custo é muito baixo é executar a mesma consulta com
OPTION (MAXDOP 1)
Sem uma reescrita total, você deve ser capaz de vincular esquemas às suas exibições. Você pode adicionar índices às suas exibições sem indexar as tabelas subjacentes.
A melhor opção, se isso for algo que você usa com frequência, é reescrever suas 3 visualizações em uma única consulta e, em seguida, criar seus índices com base nisso.
Quão ruim é o seu plano de consulta para apenas selecionar de cada uma das visualizações, cada parte desse plano de consulta grita reescrever para mim embora.
As visualizações são como uma seleção salva. Eu realmente não as usaria para nada do qual um aplicativo dependa.
como uma correção temporária sem qualquer ajuste, você pode simplesmente executar isso
Então, do outro lado, basta consultar