none
Dúvida - Índices RRS feed

  • Pergunta

  • Bom dia amigos do Technet.

    Estamos utilizando os Bancos de dados: MSDE2000 e SQLExpress 2005.
    Estou com uma dúvida relacionada a índices, que está gerando muito demora na execução das rotinas.
    São elas.


    Tenho uma tabela de pagamento
    onde criei um índice ix_pgt_data_caixa_cupom( DTVEND,CAIXA,NUMCUPOM.)

    Só  que existem algumas rotinas onde não uso o caixa. Apenas o DTVEND e NUMPOM.

    Criando um índice com apenas o DTVEND e NUMCUPOM, estaria de alguma forma atrapalhando ou sendo atrapalhado pelo índice já existente ix_pgT_data_caixa_cupom ?

    E quando em uma tabela a chave primária é composta em DTVEND, CAIXA, NUMCUPOM, poderia ter um índice apenas com DTVEND e NUMCUPOM sem perder desempenho ?

    Certo de sua atenção.

    Juarez.

    quarta-feira, 6 de agosto de 2008 13:36

Todas as Respostas

  • Juarez,

     

    Falar sobre índice não é fácil!!!

     

    Basicamente o índice que deve ser implementado com muito cautela, para evitar que seu principal objetivo que é melhor a performance possa realizar um feito ao contrário.

     

    Você poder ter na mesma table vários índices sem utilizados, logicamente quando você esta trabalhando com índices compostos o custo de processamento que é necessário acaba sendo maior!!!

     

    Em relação a uma table com chave primária composta trabalhando também com índices compostos, o custo de desempenho que você poderá gerar, vai depender da maneira que a query será processada. Para procurar trabalhar com os índices da melhor forma possível, é recomendável que você utilize as colunas do índice na claúsula where.

     

    Mas se você estiver trabalhando com funções na claúsula where, o cenário já muda.

     

    quarta-feira, 6 de agosto de 2008 19:26
    Moderador
  • Junior, muito obrigado.

    Vamos lá.

    Suponhamos que a estrutura seja a seguinte:

    Tabela - Table1

    Campos : CodTab
    DatTab
    CaiTab
    NumTab
    x1
    x2
    x3
    x4
    x5

    pk -> CodTab,DatTab,CaiTab,NumTab
    Indices: DatTab,CaiTab,NumTab
    DatTab,NumTab



    Dados os termos, faço as consultas: " Select x1,x3,x5 from table1 where dattab between ... and ...
    AND caitab = 1 and numtab = 11789"

    e depois faço um "Delete from table1 where dattab between ... and ... and numtab = 11789"

    Em caso de performance, Seria ideal incluir o caitab no delete?

    Outra duvida que surgiu , ( usamos outro banco de dados por isso a dificuldade em entender ao certo o sqlexpress ), foi se no where, o indice somente faz efeito se usarmos os campos com os comparativos  " >, <, <>, =, <=,>=".

    Grato.
    quarta-feira, 6 de agosto de 2008 20:54