[pgbr-geral] Duvida em escrita de SQL
Pessoal gostaria de uma dica dos mais esperientes: Qual a diferença para o banco na escrita destes dois SQLs? SELECT twe.* , (SELECT descricao FROM tespecializacoes WHERE idespecializacao = twe.idespecializacao) AS especializacao FROM tworkflowetapas twe SELECT twe.* FROM tworkflowetapas twe LEFT JOIN tespecializacoes esp ON (twe.idespecializacao = esp.idespecializacao) Tem alguma diferença de performance, quebra de indices, etc? ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Duvida em escrita de SQL
Pessoal gostaria de uma dica dos mais esperientes: Qual a diferença para o banco na escrita destes dois SQLs? SELECT twe.* , (SELECT descricao FROM tespecializacoes WHERE idespecializacao = twe.idespecializacao) AS especializacao FROM tworkflowetapas twe SELECT twe.* FROM tworkflowetapas twe LEFT JOIN tespecializacoes esp ON (twe.idespecializacao = esp.idespecializacao) Tem alguma diferença de performance, quebra de indices, etc? Dependendo da versão do PostgreSQL, se você fizer um EXPLAIN ANALYZE de cada uma delas, provavelmente o plano será exatamente o mesmo. []s Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Duvida em escrita de SQL
Dependendo da versão do PostgreSQL, se você fizer um EXPLAIN ANALYZE de cada uma delas, provavelmente o plano será exatamente o mesmo. Utilizo a versão 9.3.x executei o EXPLAIN.. SELECT twe.* , (SELECT descricao FROM tespecializacoes WHERE idespecializacao = twe.idespecializacao) AS especializacao FROM tworkflowetapas twe Seq Scan on tworkflowetapas twe (cost=0.00..16.36 rows=14 width=30) (actual time=0.040..0.142 rows=14 loops=1) SubPlan 1 - Seq Scan on tespecializacoes (cost=0.00..1.09 rows=1 width=218) (actual time=0.003..0.004 rows=1 loops=14) Filter: (idespecializacao = twe.idespecializacao) Rows Removed by Filter: 7 Total runtime: 0.220 ms SELECT twe.* FROM tworkflowetapas twe LEFT JOIN tespecializacoes esp ON (twe.idespecializacao = esp.idespecializacao) Seq Scan on tworkflowetapas twe (cost=0.00..1.14 rows=14 width=30) (actual time=0.013..0.016 rows=14 loops=1) Total runtime: 0.068 ms ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Duvida em escrita de SQL
2014-08-12 11:05 GMT-03:00 Pedro B. Alves pedroalve...@gmail.com: Dependendo da versão do PostgreSQL, se você fizer um EXPLAIN ANALYZE de cada uma delas, provavelmente o plano será exatamente o mesmo. Utilizo a versão 9.3.x executei o EXPLAIN.. SELECT twe.* , (SELECT descricao FROM tespecializacoes WHERE idespecializacao = twe.idespecializacao) AS especializacao FROM tworkflowetapas twe Seq Scan on tworkflowetapas twe (cost=0.00..16.36 rows=14 width=30) (actual time=0.040..0.142 rows=14 loops=1) SubPlan 1 - Seq Scan on tespecializacoes (cost=0.00..1.09 rows=1 width=218) (actual time=0.003..0.004 rows=1 loops=14) Filter: (idespecializacao = twe.idespecializacao) Rows Removed by Filter: 7 Total runtime: 0.220 ms SELECT twe.* FROM tworkflowetapas twe LEFT JOIN tespecializacoes esp ON (twe.idespecializacao = esp.idespecializacao) Seq Scan on tworkflowetapas twe (cost=0.00..1.14 rows=14 width=30) (actual time=0.013..0.016 rows=14 loops=1) Total runtime: 0.068 ms O tempo da segunda consulta é menor, pois o banco está ignorando a junção. Você tem que utilizar pelo menos algum campo da tabela para que os dois planos de execução sejam realmente iguais, e retornem a mesma coisa. []'s ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Duvida em escrita de SQL
2014-08-12 11:05 GMT-03:00, Pedro B. Alves pedroalve...@gmail.com: Dependendo da versão do PostgreSQL, se você fizer um EXPLAIN ANALYZE de cada uma delas, provavelmente o plano será exatamente o mesmo. Utilizo a versão 9.3.x executei o EXPLAIN.. SELECT twe.* , (SELECT descricao FROM tespecializacoes WHERE idespecializacao = twe.idespecializacao) AS especializacao FROM tworkflowetapas twe Seq Scan on tworkflowetapas twe (cost=0.00..16.36 rows=14 width=30) (actual time=0.040..0.142 rows=14 loops=1) SubPlan 1 - Seq Scan on tespecializacoes (cost=0.00..1.09 rows=1 width=218) (actual time=0.003..0.004 rows=1 loops=14) Filter: (idespecializacao = twe.idespecializacao) Rows Removed by Filter: 7 Total runtime: 0.220 ms SELECT twe.* FROM tworkflowetapas twe LEFT JOIN tespecializacoes esp ON (twe.idespecializacao = esp.idespecializacao) Seq Scan on tworkflowetapas twe (cost=0.00..1.14 rows=14 width=30) (actual time=0.013..0.016 rows=14 loops=1) Total runtime: 0.068 ms Creio que no segundo SELECT faltou esp.descricao na lista de campos, senão não haveria necessidade da tabela tespecializacoes (como concluiu o otimizador). Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Duvida em escrita de SQL
On Tue, Aug 12, 2014 at 11:05 AM, Pedro B. Alves pedroalve...@gmail.com wrote: SELECT twe.* FROM tworkflowetapas twe LEFT JOIN tespecializacoes esp ON (twe.idespecializacao = esp.idespecializacao) Por que isso se você não usa nada da tabela tespecializacoes e ainda a usa como LEFT JOIN? Bruno E. A. Silva. Analista de Sistemas. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Duvida em escrita de SQL
Creio que no segundo SELECT faltou esp.descricao na lista de campos, senão não haveria necessidade da tabela tespecializacoes (como concluiu o otimizador). Isso mesmo. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Duvida em escrita de SQL
Pessoal gostaria de uma dica dos mais esperientes: Qual a diferença para o banco na escrita destes dois SQLs? SELECT twe.* , (SELECT descricao FROM tespecializacoes WHERE idespecializacao = twe.idespecializacao) AS especializacao FROM tworkflowetapas twe SELECT twe.* FROM tworkflowetapas twe LEFT JOIN tespecializacoes esp ON (twe.idespecializacao = esp.idespecializacao) Tem alguma diferença de performance, quebra de indices, etc? Acredito que o LEFT JOIN valeria a pena se fosse para buscar 2 ou mais campos na tabela tespecializacoes, o SQL abaixo seria menos performatico, ou estou errado ? SELECT twe.* , (SELECT descricao FROM tespecializacoes WHERE idespecializacao = twe.idespecializacao) AS especializacao, , (SELECT outro_campo FROM tespecializacoes WHERE idespecializacao = twe.idespecializacao) AS exemplo FROM tworkflowetapas twe ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral