Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

veronicaveronica

Otimizaçao Postgres

Recommended Posts

Boa tarde, usando o EXPLAIN no postgres obtive resultados que gostaria de compreender melhor:

PESQUISA NA TABELA QUE NÃO TINHA PK E FK:

 

EXPLAIN SELECT commune.code_departement || '.' || commune.code_commune AS code,
commune.nom_commune AS commune, naissance.nb FROM commune, naissance
WHERE naissance.nb > 0 AND naissance.annee = 2008
ORDER BY nb DESC LIMIT 10;

 

--------------------------------------------------------------------------

QUERY PLAN

---------------------------------------------------------------------------
Limit (cost=2843520.95..2843520.98 rows=10 width=23)
-> Sort (cost=2843520.95..3004658.41 rows=64454984 width=23)
Sort Key: naissance.nb
-> Nested Loop (cost=156.44..1450671.92 rows=64454984 width=23)
-> Seq Scan on naissance (cost=0.00..278.35 rows=7352 width=4)
Filter: ((nb > 0) AND (annee = 2008))
-> Materialize (cost=156.44..244.11 rows=8767 width=19)
-> Seq Scan on commune (cost=0.00..147.67 rows=8767 width=19)
(8 lignes)


O que é Nested Loop, por que ele é tao alto.

Por que as pesquisas seqüenciais (Seq Scan) não tem grande tempo de execução?



DEPOIS COM PK E FK:

EXPLAIN SELECT commune.code_departement || '.' || commune.code_commune AS code,
commune.nom_commune AS commune, naissance.nb FROM commune, naissance
WHERE naissance.nb > 0 AND naissance.annee = 2008
ORDER BY nb DESC LIMIT 10;

--------------------------------------------------------------------------
QUERY PLAN
---------------------------------------------------------------------------

Limit (cost=2925890.02..2925890.04 rows=10 width=22)
-> Sort (cost=2925890.02..3091695.90 rows=66322355 width=22)
Sort Key: naissance.nb
-> Nested Loop (cost=156.44..1492687.77 rows=66322355 width=22)
-> Seq Scan on naissance (cost=0.00..278.35 rows=7565 width=4)
Filter: ((nb > 0) AND (annee = 2008))
-> Materialize (cost=156.44..244.11 rows=8767 width=18)
-> Seq Scan on commune (cost=0.00..147.67 rows=8767 width=18)
(8 lignes)


O que é MATERIALIZE?
Porque o custo aumentou com a criação das PK e FK?
Porque as pesquisas seqüenciais não mudaram NADA?



CRIACAO DE INDEX:

 

EXPLAIN SELECT commune.code_departement ||'.' || commune.code_commune AS code,
commune.nom_commune AS nom
FROM commune WHERE chef_lieu =3;



-----------------------------------------------------------
QUERY PLAN
-----------------------------------------------------------
Seq Scan on commune (cost=0.00..169.63 rows=18 width=18)
Filter: (chef_lieu = 3)
(2 lignes)


CREATE INDEX chef ON commune (chef_lieu);


--------------------------------------------------------------------------
QUERY PLAN
--------------------------------------------------------------------------
Index Scan using chef_index on commune (cost=0.00..29.30 rows=18 width=18)
Index Cond: (chef_lieu = 3)
(2 lignes)

 

Porque o índex é mais rápido que a pesquisa seqüencial?

OBRIGADA,

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que é Nested Loop, por que ele é tao alto.

 

Laços em ninho , ou seja o join de cada relaciomento da tabela, alto deve ser a falta do índice.

 


O que é MATERIALIZE?
Porque o custo aumentou com a criação das PK e FK?
Porque as pesquisas seqüenciais não mudaram NADA?
MATERIALIZE, creio ser a gravação ou criação em memória da tabela temporária do resultado

Não sei dizer pq o Custo subiu.

 

 

Porque o índex é mais rápido que a pesquisa seqüencial?

 

Imagine achar um capítulo de um livro sem índice, ou uma palavra num dicionário embaralhado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.