none
Índices x Funções RRS feed

  • Pergunta

  • Bom dia Srs.,

     

         Gostaria de saber se existe a possibilidade de indexar uma função, pois analisando uma plano de execução aqui da empresa notei que minha função está realizando Table Scan.

     

    Feliz natal a todos!!!

    domingo, 25 de dezembro de 2011 15:46

Respostas

Todas as Respostas

  • oi doutor, bom dia.

     

    Olha, no sql server 2005, tem esse comentário para índices com função:

    http://msdn.microsoft.com/pt-br/library/ms188783.aspx

    "Funções determinísticas

    A definição de uma exibição indexada deve ser determinística. Uma exibição será determinística se todas as expressões na lista selecionada, bem como as cláusulas WHERE e GROUP BY, forem determinísticas. As expressões determinísticas sempre retornam o mesmo resultado sempre que são avaliadas com um conjunto específico de valores de entrada. Somente as funções determinísticas podem participar de expressões determinísticas. Por exemplo, a função DATEADD é determinística porque sempre retorna o mesmo resultado para qualquer conjunto específico de valores de argumento para seus três parâmetros. GETDATE não é determinística porque sempre é invocada com o mesmo argumento, mas o valor que ela retorna é alterado a cada execução. Para obter mais informações, consulte Funções determinísticas e não determinísticas.

    Mesmo que uma expressão seja determinística, se ela contiver expressões flutuantes, o resultado exato poderá depender da arquitetura do processador ou da versão de microcódigo. Para assegurar a integridade dos dados, tais expressões podem participar somente como colunas não chave de exibições indexadas. As expressões determinísticas que não contêm expressões flutuantes são chamadas de precisas. Somente as expressões determinísticas precisas podem participar de colunas de chave e de cláusulas WHERE ou GROUP BY de exibições indexadas."

     

    O sql server tem vários parâmetros para a criação de índices e otimização e quanto mais depois da uma ferramenta própria para indexação.

    Mas para a sua dúvida em específico, sendo bem resumido, é o seguinte:

    - sql server permite criação de índice com função, mas não é toda função... então vamos aos testes, ok.

    Espero ter ajudado.


    Marcos Cavalcanti
    segunda-feira, 26 de dezembro de 2011 14:16
  • Agradeço pela resposta. Achei uma solução.
    • Marcado como Resposta Wellington_SQL terça-feira, 27 de dezembro de 2011 11:15
    terça-feira, 27 de dezembro de 2011 11:14
  • Olá Wellington, será que não tem alguma query na tua function que pode ser otimizada?

    Talvez verificando estas queries tu resolva o teu problema.

    Espero que ajude.

     

    terça-feira, 27 de dezembro de 2011 11:26
  • Marcus,

     

          É isso que achava estranho, pois todas as consultas dentro da função não gerava table scan e sim index seek.

    segunda-feira, 2 de janeiro de 2012 19:33