Usuário com melhor resposta
Aproveitamento Correto de Indice

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
Respostas
-
- Sugerido como Resposta Fulvio Cezar Canducci Dias sábado, 1 de fevereiro de 2014 13:22
- Marcado como Resposta Giovani Cr terça-feira, 4 de fevereiro de 2014 11:20
-
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 RamosMicrosoft 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
-
Deleted
- Marcado como Resposta Giovani Cr terça-feira, 4 de fevereiro de 2014 11:19
-
Deleted
- Marcado como Resposta Giovani Cr terça-feira, 4 de fevereiro de 2014 11:19
Todas as Respostas
-
- Sugerido como Resposta Fulvio Cezar Canducci Dias sábado, 1 de fevereiro de 2014 13:22
- Marcado como Resposta Giovani Cr terça-feira, 4 de fevereiro de 2014 11:20
-
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 RamosMicrosoft 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
-
Deleted
- Marcado como Resposta Giovani Cr terça-feira, 4 de fevereiro de 2014 11:19
-
-
Deleted
- Marcado como Resposta Giovani Cr terça-feira, 4 de fevereiro de 2014 11:19