none
Aproveitamento Correto de Indice RRS feed

  • Pergunta

  • No seguinte cenário

    tabela   produtos

                 codEmpresa  int

                 codProduto   int

                descricao       varchar

    chave primária da tabela : codEmpresa - codProduto

    Sempre que for executado um Select obrigatoriamente no where do select vai ter codEmpresa = 1 por

    exemplo, visto que são tabelas multi-empresas.

    A questão é , se for criado um índice por descrição, este índice deve ter apenas o campo descrição ou

    codEmpresa e descricao, para que seja feito order by descrição ou o correto seria order by codEmpresa, descricao.

    obrigado

    sábado, 1 de fevereiro de 2014 11:23

Respostas

  • Coloque somente o Descrição, porque, como dito vai ter um Where antes com o codEmpresa já visto que ele é um chave !!!


    Fulvio Cezar Canducci Dias

    sábado, 1 de fevereiro de 2014 13:22
  • Jceoms,

    Como codEmpresa já faz parte da chave primária, esta coluna já esta indexado junto com codProduto.

    Você precisa analisar se na maioria das instruções SELECT, UPDATE e DELETE esta coluna codEmpresa está presente na condição de pesquisa (dentro da cláusula "WHERE"). Se estiver, então esta coluna deve fazer parte do seu novo índice.

    Para evitar que uma consulta utilize múltiplos índices para obter os dados desejados, é interessante incluir na criação do seu índice as colunas que fazem parte da maior parte das instruções SELECT e UPDATE nesta tabela, através do INCLUDE. Veja o modelo abaixo:

    CREATE NONCLUSTERED INDEX IDX_DESCRICAO
        ON Produtos (Descricao)
        INCLUDE (codEmpresa, Qtd_Estoque);
    GO
    

    Se todas às colunas forem importantes todas para às suas instruções então o INCLUDE é desnecessário, e a chave primária passa a ser responsável por este retorno com maior eficiência, além de ocupar um menor espaço de armazenamento.

    Veja mais informações no link abaixo:

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

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta Giovani Cr terça-feira, 4 de fevereiro de 2014 11:19
    sábado, 1 de fevereiro de 2014 13:28
    Moderador
  • Deleted
    • Marcado como Resposta Giovani Cr terça-feira, 4 de fevereiro de 2014 11:19
    sábado, 1 de fevereiro de 2014 21:19
  • Deleted
    • Marcado como Resposta Giovani Cr terça-feira, 4 de fevereiro de 2014 11:19
    segunda-feira, 3 de fevereiro de 2014 10:36

Todas as Respostas

  • Coloque somente o Descrição, porque, como dito vai ter um Where antes com o codEmpresa já visto que ele é um chave !!!


    Fulvio Cezar Canducci Dias

    sábado, 1 de fevereiro de 2014 13:22
  • Jceoms,

    Como codEmpresa já faz parte da chave primária, esta coluna já esta indexado junto com codProduto.

    Você precisa analisar se na maioria das instruções SELECT, UPDATE e DELETE esta coluna codEmpresa está presente na condição de pesquisa (dentro da cláusula "WHERE"). Se estiver, então esta coluna deve fazer parte do seu novo índice.

    Para evitar que uma consulta utilize múltiplos índices para obter os dados desejados, é interessante incluir na criação do seu índice as colunas que fazem parte da maior parte das instruções SELECT e UPDATE nesta tabela, através do INCLUDE. Veja o modelo abaixo:

    CREATE NONCLUSTERED INDEX IDX_DESCRICAO
        ON Produtos (Descricao)
        INCLUDE (codEmpresa, Qtd_Estoque);
    GO
    

    Se todas às colunas forem importantes todas para às suas instruções então o INCLUDE é desnecessário, e a chave primária passa a ser responsável por este retorno com maior eficiência, além de ocupar um menor espaço de armazenamento.

    Veja mais informações no link abaixo:

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

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA - SQL Server 2012
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    • Marcado como Resposta Giovani Cr terça-feira, 4 de fevereiro de 2014 11:19
    sábado, 1 de fevereiro de 2014 13:28
    Moderador
  • Deleted
    • Marcado como Resposta Giovani Cr terça-feira, 4 de fevereiro de 2014 11:19
    sábado, 1 de fevereiro de 2014 21:19
  • desculpe me expressei mal ao colocar codEmpresa=1 , foi apenas

    o um como exemplo, na verdade o sistema é multi empresa

    domingo, 2 de fevereiro de 2014 23:40
  • Deleted
    • Marcado como Resposta Giovani Cr terça-feira, 4 de fevereiro de 2014 11:19
    segunda-feira, 3 de fevereiro de 2014 10:36