none
Qual é a melhor maneira de escolher qual é o melhor campo para criar um indice ?

    General discussion

  • Alguém tem alguma dica para me orientar ?

    Guilherme Costa
    Email: guilerme18@hotmail.com

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    Saturday, March 03, 2012 12:31 PM

All replies

  • Olá Guilherme,

    De uma olhada em alguns videos do Gustavo Maia, um MVP que sempre está contribuindo com a comunidade. 

    http://www.youtube.com/user/gmasql

    Se útil, classifique.


    Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com

    Monday, March 05, 2012 1:56 AM
  • Geralmente em campos de busca; campos que aparecem muito em clausulas where:

    Ex.: datas, cliente, valores reais...

    Muito boa a dica das vídeo aulas.


    Marcilio S Santos Computer Programmer My intention is the pleasure to solve the puzzle. Helping someone is just a side effect.

    Monday, March 05, 2012 3:03 AM


  • Olá Guilherme,  bom dia!

    Primeiro tome cuidado para não sair criando um monte de índices, pois isso irá afetar diretamente a performance de seu banco.

    Se a sua aplicação tem um consulta por exemplo, pelo código do cliente e que é a mais utilizada, crie o índice por este campo....

    Ah! Mais também tenho select´s disparados contra o banco utilizando o campo, por exemplo, CEP, então o crie também.

    Mas lembre-se! Não sai criando índices "a tôrta e a direita.." !!!

    VocÊ poderá criar assim, por exemplo :


    Create NonClustered Index tb_Cliente_PorCodigo On tb_cliente (codClien)
    e
    Create NonClustered Index tb_Cliente_PorCep On tb_cliente (codCep)


    Ou ainda, crie o índice dinâmico:
    Create NonClustered Index tb_Cliente_PorCodigo On tb_cliente (codClien) Include (codCep)


    beleza..!!


    Sucesso!!

    Gilberto Herminio Analista de Desenvolvimento de Sistemas Mogi das Cruzes-SP desenvolvedor.ti@r7.com / gil_haf@ig.com.br

    Monday, March 05, 2012 10:25 AM
  • Olá Tenho uma dúvida!

    Aqui onde trabalho, tenho dois ambientes de produção e teste. Depois de feito o restore dos dados da base de produção para a base de teste, notei que uma mesma query executada no ambiente de produção demora uns 2 minutos para ser executa e no de teste uns 4 segundos. Depois reindexar os indices, atualizar as estaticas, alterar fill factor, achando que o indice estava com problemas e nada adiantar, reparei que no ambiente de teste está utilizando um indice e no de produção outro (um clusterizado), para teste forcei o ambiente de produção usar o mesmo indice utilizado na base de teste e a query foi executada em 3 segundos. fiz o mesmo no ambiente de teste utilizando o indice clusterizado e deu uns 2 min e ainda na tinha sido processado. Não entendi...porque a base de dados com a mesma estrutura, mesmo conteúdo em ambientes diferentes, e a mesma query, em um ambiente seleciona um indice e em outro outro que não é o melhor.

    Wednesday, March 13, 2013 6:24 PM
  • Lu_And,

    Isso pode acontecer pois o plano de execução ja deve estar em cache, tente executar um DBCC FREEPROCCACHE no ambiente de testes e reexecutar a query e veja qual o plano de execução escolhido pelo SQL Server para a execução da query.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    Wednesday, March 13, 2013 6:26 PM
    Moderator
  • Olá Fabrizio, executei nos dois ambientes e não mudou nada.
    Wednesday, March 13, 2013 6:33 PM
  • Guilherme,

    Costume dizer que este tipo de necessidade esta relacionada com o nível de seletividade dos dados!!!!


    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]

    Monday, March 18, 2013 6:28 PM
  • Guilherme , uma excelente maneira de saber qual o campo indice a ser utilizado a principio , é utilizando a sugestão do proprio SQL SERVER através do uso do execution Plain.

    Para acessar o execution plain voce pode na posse da consulta da tabela ir em "query/Display Estimated Execution Plain" 

    

    Monday, March 18, 2013 6:44 PM