Usuário com melhor resposta
Otimizar consulta em várias tabelas

Pergunta
-
Boa noite pessoa estou com uma certa dificuldade em otimizar a minha consulta em SQL SERVER tenho em meu banco de dados a seguinte estrutura (Imagem a abaixo) e estou precisando retornar os logradouros assim como o cep e o nome do bairro de uma cidade especifica, só que eu acho que script não está muito bom pois está demorando muito as consultas, alguém poderia me ajudar otimizar a consulta? Segue meu código abaixo e a estrutura do banco de dados.
SELECT tbl_Logradouro.codigoLogradouro, tbl_Logradouro.nomeLogradouro, tbl_Bairro.nomeBairro, tbl_Logradouro.cepLogradouro FROM tbl_Cidade INNER JOINR tbl_Bairro ON tbl_Cidade.codigoCidade = tbl_Bairro.codigoCidade INNER JOIN tbl_Logradouro ON tbl_Bairro.codigoBairro = tbl_Logradouro.codigoBairro WHERE tbl_Cidade.codigoCidade = 3965 ORDER BY nomeLogradouro
Fiz o relacionamento usando o Access apenas para a ilustração...
- Editado J.AndersonSantos segunda-feira, 14 de setembro de 2015 01:11 Melhor visualização
- Tipo Alterado Marcos SJ terça-feira, 15 de setembro de 2015 18:31 Adequação
- Tipo Alterado Marcos SJ sexta-feira, 25 de setembro de 2015 17:31 Adequação
Respostas
-
J.AndersoSantos,
Por padrão toda e qualquer chave estrangeira quando especificada no SQL Server é reconhecida internamente como um mecanismo de controle, pesquisa e organização dos dados.
Mas a criação de um índice por parte do SQL Server para esta chave estrangeira não é algo obrigatório ou automático, vale ressaltar que caso venha a ser criado um índice para uma chave estrangeira, o mesmo será do tipo NonClustered.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta Marcos SJ sexta-feira, 25 de setembro de 2015 17:32
-
Olá J.AndersonSantos,
Algumas perguntas:
- Esses campos que você está utilizando na clausula "ON", eles são FK's reais com índices?
- Qual o tipo dos campos de código ?
- Qual o volume de dados ?
- O Banco de dados é DEV ou PROD? Se for PROD, como está o uso dele (em % de utilização ou volume de acessos)?
- Marcado como Resposta Marcos SJ sexta-feira, 25 de setembro de 2015 17:31
-
Um.. não sei se ele cria. Dá uma olhada para ver se tem os índices corretos de FK. Isso melhora MUITO a performance ;)
Esse tipo de query não é para demorar nada para executar....
Passa o Execution Plan desta consulta aqui no Fórum para eu dar uma olhada
- Marcado como Resposta Marcos SJ sexta-feira, 25 de setembro de 2015 17:32
Todas as Respostas
-
Olá J.AndersonSantos,
Algumas perguntas:
- Esses campos que você está utilizando na clausula "ON", eles são FK's reais com índices?
- Qual o tipo dos campos de código ?
- Qual o volume de dados ?
- O Banco de dados é DEV ou PROD? Se for PROD, como está o uso dele (em % de utilização ou volume de acessos)?
- Marcado como Resposta Marcos SJ sexta-feira, 25 de setembro de 2015 17:31
-
Então Guilherme respondendo suas perguntas...
- Os campos usados na clausula ON são chaves estrangeiras sim. (Quando você cria uma tabela e diz que um campo é chave estrangeira ele cria um índice neste campo?)
- Os tipos do campo código são inteiros
- O banco de dados possui quase 1 milhão de registros na tabela de logradouro.
- O banco de dados é DEV
-
Um.. não sei se ele cria. Dá uma olhada para ver se tem os índices corretos de FK. Isso melhora MUITO a performance ;)
Esse tipo de query não é para demorar nada para executar....
Passa o Execution Plan desta consulta aqui no Fórum para eu dar uma olhada
- Marcado como Resposta Marcos SJ sexta-feira, 25 de setembro de 2015 17:32
-
J.AndersoSantos,
Por padrão toda e qualquer chave estrangeira quando especificada no SQL Server é reconhecida internamente como um mecanismo de controle, pesquisa e organização dos dados.
Mas a criação de um índice por parte do SQL Server para esta chave estrangeira não é algo obrigatório ou automático, vale ressaltar que caso venha a ser criado um índice para uma chave estrangeira, o mesmo será do tipo NonClustered.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta Marcos SJ sexta-feira, 25 de setembro de 2015 17:32
-
J.AndersoSantos,
Por padrão toda e qualquer chave estrangeira quando especificada no SQL Server é reconhecida internamente como um mecanismo de controle, pesquisa e organização dos dados.
Mas a criação de um índice por parte do SQL Server para esta chave estrangeira não é algo obrigatório ou automático, vale ressaltar que caso venha a ser criado um índice para uma chave estrangeira, o mesmo será do tipo NonClustered.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
Funcionou direitinho.. Valeu pela ajuda...