PostgreSQL Junção Esquerda selecione VS Seleção Normal

1

Eu queria saber qual é o mais rápido - juntar vários selects em um join select ou realmente fazer os selects separados é mais rápido?

Eu estou fazendo uma tarefa que tem muitas tabelas (atualmente 4 mas provavelmente aumentará) relacionadas umas com as outras e eu as seleciono via LEFT JOIN. Será que essas consultas sql ao postgresql irão superá-lo?

O que você acha da sua experiência:)

    
por tftd 26.01.2011 / 16:57

2 respostas

2

A resposta é "Depende do seu banco de dados", embora geralmente a consulta seja escrita, pois o JOIN é o preferido, pois é mais fácil de ler e fornece ao planejador de consulta algumas dicas sobre o que você está fazendo /

Você deve pedir ao Postgres para EXPLAIN (ou EXPLAIN ANALYZE ) o plano de consulta da sua consulta e ver se existem diferenças substanciais - ao mesmo tempo, você também pode detectar outras coisas que pode otimizar, como a indexação. Consulte o manual do Postgres para obter mais informações sobre o uso de EXPLAIN .

    
por 26.01.2011 / 17:11
2

Em geral, há um custo para preparar cada consulta e um custo para recuperar os dados. Para conjuntos de dados pequenos, executar SELECTs em um loop não é tão ruim, mas se você estiver fazendo um SELECT em uma tabela com 1000 linhas, então para cada uma dessas linhas fazendo outro SELECT em uma tabela diferente com 1000 linhas, a diferença será ser muito perceptível, mesmo que as seleções em loop sejam executadas a partir de uma consulta previamente preparada.

Mesmo que o custo de preparar cada consulta no loop seja zero, é possível que os elementos JOINed reduzam o tamanho total dos dados recuperados. Por exemplo, se você estiver unindo sua tabela de 1.000 linhas em uma tabela com apenas uma linha correspondente, a versão JOIN da consulta retornaria uma linha, enquanto os SELECTs separados retornariam 1000 linhas da primeira tabela, com o loop produzindo 999 conjuntos vazios e 1 linha.

Se você estiver solicitando um item específico de cada tabela, em vez de percorrer um conjunto de linhas, a diferença entre uma consulta "grande" e quatro consultas pequenas provavelmente será minúscula. Como voretaq7 disse, fazer com que o postgresql EXPLAIN o que cada consulta fará e quanto tempo levará para fazer isso seria um longo caminho para descobrir exatamente o que acontecerá.

    
por 26.01.2011 / 17:56