none
Como saber se um indice esta sendo usado na minha consulta RRS feed

  • Pergunta

  • Pessoal boa tarde eu tenho essa consulta aqui, na qual esta demorando cerca de 4 minutos e  20 segundos  para retornar 35.398 linhas

    SELECT  U.CODCRT AS CARTAO, U.DATINC ,U.CPF, U.NOMUSU AS NOME, U.NUMDEP AS TD,
            U.CPF) AS LIMITE, S.DESTA AS STATUS,U.DATSTA AS DATA_STATUS,
      FROM USUARIO U
                                 LEFT JOIN CLASSE L ON L.CODCLA = U.CODCLA                            
                                  INNER JOIN STATUS S ON S.STA = U.STA
                                  WHERE U.CODCLI = '00000' ORDER BY LTRIM(U.NOMUSU)

    e a tabela tem esses indices, como saber se preciso criar outro, e ou qual ele esta usando

    quarta-feira, 6 de agosto de 2014 20:48

Respostas

  • Use o Plano de Execução para ver os indices que o TSQL está usando.

    Para saber se precisa fazer algum ajuste, como criar um novo indice, isso depende da analise que for feito do plano de execução que foi gerado.

    No link abaixo, você encontra instruções de como gerar o plano de execução:

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


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    quarta-feira, 6 de agosto de 2014 22:32
  • Boa noite,

    DougAmFm, para complementar, acredito que o uso da função LTrim no Order By também esteja prejudicando o desempenho dessa consulta, pois deve estar provocando a execução de um Sort para ordenar as linhas, deixando dessa forma de utilizar o índice IX_NOMUSU.

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 6 de agosto de 2014 23:53

Todas as Respostas

  • Deleted
    quarta-feira, 6 de agosto de 2014 21:56
  • Deleted
    quarta-feira, 6 de agosto de 2014 22:04
  • Use o Plano de Execução para ver os indices que o TSQL está usando.

    Para saber se precisa fazer algum ajuste, como criar um novo indice, isso depende da analise que for feito do plano de execução que foi gerado.

    No link abaixo, você encontra instruções de como gerar o plano de execução:

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


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    quarta-feira, 6 de agosto de 2014 22:32
  • Boa noite,

    DougAmFm, para complementar, acredito que o uso da função LTrim no Order By também esteja prejudicando o desempenho dessa consulta, pois deve estar provocando a execução de um Sort para ordenar as linhas, deixando dessa forma de utilizar o índice IX_NOMUSU.

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 6 de agosto de 2014 23:53
  • Senhores obrigado pela ajuda, vou dar mais uma lida referente ao plano de execução, pois não achei onde ele mostra qual indice esta usando,Jose.Diz eu fiz como vc falou sobre o status , e a tabela classe retirei a menção sobre ela, continuou me retornando os 35398 linhas com 02.10 na procedure e com a sql solta 04:40
    quinta-feira, 7 de agosto de 2014 16:48
  • Se você puder compartilhar o plano de execução através do Onedrive ou similar, por exemplo.

    Consigo olhar e sugerir algo mais direto.

    Como salvar o plano de execução:
    http://msdn.microsoft.com/pt-br/library/ms190646.aspx


    Alex Rosa - Premier Field Engineer - Data Platform

    Disclaimer: This content is provided "as-is" and without warranties of any kind, either express or implied. You should therefore verify any information contained in the content before acting on it.


    quinta-feira, 7 de agosto de 2014 17:34
  • Boa noite,

    DougAmFm, para complementar, acredito que o uso da função LTrim no Order By também esteja prejudicando o desempenho dessa consulta, pois deve estar provocando a execução de um Sort para ordenar as linhas, deixando dessa forma de utilizar o índice IX_NOMUSU.

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    Gapimex,

    Concordo com a sua observação.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    sexta-feira, 8 de agosto de 2014 18:08
  • Douglas,

    Pensar que quanto mais indices existir em sua tabela sera melhor para a performance esta muito enganado, existe aquele velho ditado, "Quanto maior a altura maior o tambo", isso também vale para indices, quanto mais indices existirem em uma table, maior poderá ser:

    • O espaço ocupado pelo índice em disco;
    • Maior fragmentação de dados e uso de página de dados;
    • Maior necessidade do SQL Server manter os dados atualizados;
    • Maior a possibilidade de lentidão durante o processo de manipulação dos dados por leitura e escrita em mais indices; e
    • Maior lentidão para pesquisar os dados.

    Precisamos sempre analisar o conceito de Seletividade e Granularidade dos dados para identificar se realmente é necessário criar um ou mais indices.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | SoroCódigos] @JuniorGalvaoMVP | pedrogalvaojunior.wordpress.com

    sexta-feira, 8 de agosto de 2014 18:13