none
View Particionada - BUG? RRS feed

  • Pergunta

  • Bom dia

    Durante alguns testes que fiz usando uma view particionada, me deparei com a seguinte situação:

    Quando executo uma query usando constantes, o plano de execução é exatamente o esperado, ou seja, a view utiliza apenas as tabelas envolvidas na query. Agora, quando transformo as constantes em variáveis e do mesmo tipo de dados da view, o plano de execução mostra que todas as tabelas da view são consultadas. Mesmo utilizando sp_executesql, o plano d execução capturado é o mesmo.

    Alguém saberia me dizer o motivo?

    Obrigado.

    quarta-feira, 19 de dezembro de 2012 13:38

Todas as Respostas

  • Boa tarde José,

    Em tempo de compilação da consulta o SQL não consegue ler o valor das variáveis, por isso ele criar um plano que acessa "todas" as tabelas. Porém tenho quase certeza de que apenas as devidas tabelas serão acessadas, tente dar uma olhada no resultado de statistics io e veja se o IO ocorre em todas as tabelas, ou se apenas nas tabelas correspondentes aos parâmetros.

    O query optimizer tem que criar um plano que irá server para todos os possíveis parâmetros, mas isso não necessáriamente significa que todas as tabelas serão acessadas.

    Abs.


    Fabiano Neves Amorim - SQL Server MVP http://blogs.solidq.com/fabianosqlserver/

    quinta-feira, 20 de dezembro de 2012 16:32
  • Fabiano,

    Este perdido por aqui, a quanto tempo não o vejo nos Fóruns.

    José,

    Vale ressaltar que o SQL Server tem que fazer um trabalho adicional quando estamos trabalhando com variáveis para que ele possa entender os tipos de dados que serão enviados para estas varíaveis e como elas estão sendo invocado dentro da query que será processada.

    Você poderia destacar os operadores que estão sendo apresentados no Plano de Execução que o SQL Server esta gerando?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]


    quinta-feira, 20 de dezembro de 2012 16:41
  • Boa tarde Junior

    Seria isso o que voce pediu?

    StmtText                                                                                                                                                                                                               
    --------                                                                                                                                                                                                               
    Concatenation                                                                                                                                                                                                          
      |--Filter(WHERE:(STARTUP EXPR([@p1]=(201201))))                                                                                                                                                                      
      |    |--Clustered Index Seek(OBJECT:([TesteViews].[dbo].[JANTeste01].[pk_JANTeste01]), SEEK:([TesteViews].[dbo].[JANTeste01].[AnoMesFat]=[@p1] AND [TesteViews].[dbo].[JANTeste01].[Cliente]=[@p2]) ORDERED FORWARD) 
      |--Filter(WHERE:(STARTUP EXPR([@p1]=(201202))))                                                                                                                                                                      
      |    |--Clustered Index Seek(OBJECT:([TesteViews].[dbo].[FEVTeste01].[pk_FEVTeste01]), SEEK:([TesteViews].[dbo].[FEVTeste01].[AnoMesFat]=[@p1] AND [TesteViews].[dbo].[FEVTeste01].[Cliente]=[@p2]) ORDERED FORWARD) 
      |--Filter(WHERE:(STARTUP EXPR([@p1]=(201203))))                                                                                                                                                                      
      |    |--Clustered Index Seek(OBJECT:([TesteViews].[dbo].[MARTeste01].[pk_MARTeste01]), SEEK:([TesteViews].[dbo].[MARTeste01].[AnoMesFat]=[@p1] AND [TesteViews].[dbo].[MARTeste01].[Cliente]=[@p2]) ORDERED FORWARD) 
      |--Filter(WHERE:(STARTUP EXPR([@p1]=(201204))))                                                                                                                                                                      
      |    |--Clustered Index Seek(OBJECT:([TesteViews].[dbo].[ABRTeste01].[pk_ABRTeste01]), SEEK:([TesteViews].[dbo].[ABRTeste01].[AnoMesFat]=[@p1] AND [TesteViews].[dbo].[ABRTeste01].[Cliente]=[@p2]) ORDERED FORWARD) 
      |--Filter(WHERE:(STARTUP EXPR([@p1]=(201205))))                                                                                                                                                                      
      |    |--Clustered Index Seek(OBJECT:([TesteViews].[dbo].[MAITeste01].[pk_MAITeste01]), SEEK:([TesteViews].[dbo].[MAITeste01].[AnoMesFat]=[@p1] AND [TesteViews].[dbo].[MAITeste01].[Cliente]=[@p2]) ORDERED FORWARD) 
      |--Filter(WHERE:(STARTUP EXPR([@p1]=(201206))))                                                                                                                                                                      
      |    |--Clustered Index Seek(OBJECT:([TesteViews].[dbo].[JUNTeste01].[pk_JUNTeste01]), SEEK:([TesteViews].[dbo].[JUNTeste01].[AnoMesFat]=[@p1] AND [TesteViews].[dbo].[JUNTeste01].[Cliente]=[@p2]) ORDERED FORWARD) 
      |--Filter(WHERE:(STARTUP EXPR([@p1]=(201207))))                                                                                                                                                                      
      |    |--Clustered Index Seek(OBJECT:([TesteViews].[dbo].[JULTeste01].[pk_JULTeste01]), SEEK:([TesteViews].[dbo].[JULTeste01].[AnoMesFat]=[@p1] AND [TesteViews].[dbo].[JULTeste01].[Cliente]=[@p2]) ORDERED FORWARD) 
      |--Filter(WHERE:(STARTUP EXPR([@p1]=(201208))))                                                                                                                                                                      
      |    |--Clustered Index Seek(OBJECT:([TesteViews].[dbo].[AGOTeste01].[pk_AGOTeste01]), SEEK:([TesteViews].[dbo].[AGOTeste01].[AnoMesFat]=[@p1] AND [TesteViews].[dbo].[AGOTeste01].[Cliente]=[@p2]) ORDERED FORWARD) 
      |--Filter(WHERE:(STARTUP EXPR([@p1]=(201209))))                                                                                                                                                                      
      |    |--Clustered Index Seek(OBJECT:([TesteViews].[dbo].[SETTeste01].[pk_SETTeste01]), SEEK:([TesteViews].[dbo].[SETTeste01].[AnoMesFat]=[@p1] AND [TesteViews].[dbo].[SETTeste01].[Cliente]=[@p2]) ORDERED FORWARD) 
      |--Filter(WHERE:(STARTUP EXPR([@p1]=(201210))))                                                                                                                                                                      
      |    |--Clustered Index Seek(OBJECT:([TesteViews].[dbo].[OUTTeste01].[pk_OUTTeste01]), SEEK:([TesteViews].[dbo].[OUTTeste01].[AnoMesFat]=[@p1] AND [TesteViews].[dbo].[OUTTeste01].[Cliente]=[@p2]) ORDERED FORWARD) 
      |--Filter(WHERE:(STARTUP EXPR([@p1]=(201212))))                                                                                                                                                                      
           |--Clustered Index Seek(OBJECT:([TesteViews].[dbo].[DEZTeste01].[pk_DEZTeste01]), SEEK:([TesteViews].[dbo].[DEZTeste01].[AnoMesFat]=[@p1] AND [TesteViews].[dbo].[DEZTeste01].[Cliente]=[@p2]) ORDERED FORWARD) 

    quinta-feira, 20 de dezembro de 2012 17:43
  • José Marcelo,

    Tem como você apresentar de forma gráfica?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quinta-feira, 20 de dezembro de 2012 17:47

  • quinta-feira, 20 de dezembro de 2012 18:23