| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 13:08:31
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
Oi pessoal, se estou querendo fazer uma pesquisa para obter UMA tupla contendo a placa do carro e o nome do dono por exemplo. Devo pesquisar em uma tabela de cada vez ou faço o join?
(uma tabela por vez)
SELECT m.nome FROM motorista m WHERE m.cpf = ?;
SELECT v.placa FROM veiculo v WHERE v.cpf_dono = ?
(com join)
SELECT m.nome, v.placa FROM motorista m INNER JOIN veiculo v ON m.cpf = v.cpf_dono WHERE m.cpf = ?
Se o resultado fosse um conjunto relacionando as placas e os respectivos nomes dos proprietários, não há dúvida de que a segunda forma seria a ideal. Mas no meu caso, eu sei que a query só trará um único resultado, então neste caso, qual é a melhor forma?
This message was edited 1 time. Last update was at 03/11/2008 13:10:16
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 13:17:46
|
marciocamurati
JavaEvangelist
![[Avatar]](/images/avatar/7371364b3d72ac9a3ed8638e6f0be2c9.jpg)
Membro desde: 29/05/2004 14:54:36
Mensagens: 322
Localização: São Paulo
Offline
|
Bom não existe nenhuma receita para query na verdade o ideal é sempre estudar/analisar caso a caso, depende muito de como foram gerados os indices se existem e etc. Mas no chute imagino que o JOIN vá lhe dar uma resposta/performance melhor do que fazer duas queries em separado, mas só testando em algum analyzer da vida para você ter essa resposta principalmente que o que implica em performance é na verdade a longo prazo, quantidade de dados e etc. []s
This message was edited 1 time. Last update was at 03/11/2008 13:19:07
|
Marcio Camurati |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 13:24:06
|
leo_mf
JavaChild
![[Avatar]](/images/avatar/158223cf1707f7e6dd5cd3a0d64f89f3.jpg)
Membro desde: 03/10/2008 09:59:50
Mensagens: 101
Localização: São Paulo - SP
Offline
|
Pode confiar, o join é bem melhor.
|
Tento gostar do Eclipse, mas ele só me decepciona. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 13:44:52
|
fantomas
GUJ Master
![[Avatar]](/images/avatar/a2bf57c3aee957f2aaf75aa84717b3be.jpg)
Membro desde: 24/04/2008 16:10:55
Mensagens: 1528
Localização: Terra (maior parte do tempo)
Offline
|
marciocamurati wrote:Se o resultado fosse um conjunto relacionando as placas e os respectivos nomes dos proprietários, não há dúvida de que a segunda forma seria a ideal. Mas no meu caso, eu sei que a query só trará um único resultado, então neste caso, qual é a melhor forma?
Não sei se entendi direito, mas estou com o pessoal ai de cima, o join juntamente com uma boa formação de chaves, respectivos indices e outras particularidades de cada banco sempre vai lhe dar a melhor resposta principalmente neste seu caso; as duas tabelas parecem que estão relacionas pela coluna cpf (provavelmente é a chave primária) numa relação de 1:n então o join é o melhor caminho, vc obterá o resultado em um ÚNICO acesso.
flws
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/11/2008 14:23:29
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
Bem, no meu caso eu tenho chaves primárias compostas (com a PK de uma tabela sendo parte da PK de outra tabela), um modelo que não é bem estruturado.
Já tenho uma pesquisa que faz 3 joins para trazer uma tupla. Daí eu precisava trazer mais um valor para o qual precisaria dar um outer join em mais duas tabelas (com inner join entre si), o que deixaria a SQL cada vez mais pesada e complicada com mais e mais joins em chaves compostas.
Neste caso, o que vocês acham que tende a ser melhor? Joins mesmos por mais complicada que a SQL fique?
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/11/2008 17:50:48
|
vinnyparker
JavaChild
![[Avatar]](/images/avatar/1b2b3ee3c156732e9e50bfd4d963cc74.png)
Membro desde: 08/07/2008 09:46:20
Mensagens: 124
Offline
|
rapaz eu prefirira usar com join
porem nao sou mto fan de usar o inner nao, pq ele faz a consulta demorar mais...
use o left join ... sempre uso dessa forma e fika td blz
|
http://www.evollux.net
Fedora 15
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/11/2008 20:21:30
|
ovelha
Java Ninja
![[Avatar]](/images/avatar/394201ad68984c677be221f6d9f263fc.jpeg)
Membro desde: 12/09/2007 13:17:41
Mensagens: 281
Offline
|
Em um caso simples assim até parece facil não usar join, quero ver fazer isto em 5 tabelas sendo que todas tem um relacionamento 1 - *.
|
bééééééééééééééééé |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/11/2008 22:25:39
|
Mauricio Linhares
Moderador
![[Avatar]](/images/avatar/97af07a14cacba681feacf3012730892.jpg)
Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline
|
Rode explain nas duas e veja quantas linhas cada uma busca e quais índices elas usam
Não tem jeito mais fácil de se saber, quem usar menos linhas e os melhores índices vai ser a melhor opção.
|
Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr
Screencast de Introdução a linguagem Objective-C |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/11/2008 10:36:00
|
vinnyparker
JavaChild
![[Avatar]](/images/avatar/1b2b3ee3c156732e9e50bfd4d963cc74.png)
Membro desde: 08/07/2008 09:46:20
Mensagens: 124
Offline
|
rapaz se vc tem 5 tabelas e todas com relacionamento usaq fica mara
|
http://www.evollux.net
Fedora 15
|
|
|
 |
|
|