Vous n'êtes pas identifié(e).

#1 27/02/2015 14:40:57

F.Chanson
Membre

Explain avec rows=0 et Seq san

Bonjour j'ai un pb avec une simple requete SQL sur une   table de 5 Millions d'enregistrements  qui fait un sequentiel scan plutot que de passer par l'index btree non unique "ib_t_band_fk_metadata"

Il y a 5 enregistrements par ib_t_band_fk_metadata

Contexte Postgres 8.4.4 , linux suse11 SP3, statistique_target = 5400

explain analyze select
bands0_.FK_METADATA as FK10_1_,  bands0_.id as id1_, bands0_.BAND_ID as BAND2_46_0_,
bands0_.BIT_ORDER as BIT3_46_0_,  bands0_.BIT_PIXEL as BIT4_46_0_,  bands0_.MAX_VALUE as MAX5_46_0_,
  bands0_.MEAN_VALUE as MEAN6_46_0_,   bands0_.FK_METADATA as FK10_46_0_,  bands0_.MIN_VALUE as MIN7_46_0_,
  bands0_.POLARIZATION as POLARIZA8_46_0_,   bands0_.STD_DEVIATION as STD9_46_0_
  from BAND bands0_ where bands0_.fk_metadata='4b364394-6f7f-4249-acb4-2b16ce99f70d';
 
----------------------------------------------------------------------------------------------------------------
Seq Scan on band bands0_  (cost=0.00..115113.70 rows=5 width=333) (actual time=727.182..727.182 rows=0 loops=1)
   Filter: ((fk_metadata)::text = '4b364394-6f7f-4249-acb4-2b16ce99f70d'::text)
Total runtime: 727.215 ms


\d band
              Table "public.band"
    Column     |          Type          | Modifiers
---------------+------------------------+-----------
id            | character varying(36)  | not null
band_id       | character varying(200) |
bit_order     | character varying(50)  |
bit_pixel     | integer                |
max_value     | real                   |
mean_value    | real                   |
min_value     | real                   |
polarization  | character varying(50)  |
std_deviation | real                   |
fk_metadata   | character varying(36)  | not null
Indexes:
    "band_pkey" PRIMARY KEY, btree (id)
    "ib_t_band_c_band_id" btree (band_id)
    "ib_t_band_c_max_value" btree (max_value)
    "ib_t_band_c_mean_value" btree (mean_value)
    "ib_t_band_c_min_value" btree (min_value)
    "ib_t_band_c_std_deviation" btree (std_deviation)
    "ib_t_band_fk_metadata" btree (fk_metadata)
Foreign-key constraints:
    "fk1efe3585145060" FOREIGN KEY (fk_metadata) REFERENCES md_metadata(id)

Cordialement
Francis

Hors ligne

#2 27/02/2015 14:52:22

F.Chanson
Membre

Re : Explain avec rows=0 et Seq san

Rebonjour
correctif la valeur du statistique_target est de 500 et non de 5400

Hors ligne

#3 27/02/2015 18:21:09

gleu
Administrateur

Re : Explain avec rows=0 et Seq san

Avez-vous pensé à la classe d'opérateur pour la création de l'index ?


Guillaume.

Hors ligne

#4 27/02/2015 18:59:49

rjuju
Administrateur

Re : Explain avec rows=0 et Seq san

Contexte Postgres 8.4.4

Au passage, vous avez 18 version mineures de retard. Je vous conseillerais de passer en 8.4.22 sans attendre. De pus, la version 8.4 n'est plus supportée, une mise à jour majeure à plus ou moins court terme serait également une bonne idée.

Hors ligne

#5 04/03/2015 14:43:28

F.Chanson
Membre

Re : Explain avec rows=0 et Seq san

Concernant la classe d'opérateur pour la création de l'index , la clause  where ne fait que des "=" , une index avec classe d'opérateur n'apporterait à mon avis pas grand chose ?
La base en production est en 8.4.4 , le passage en 9.x est prévue au 2 trimestre 2015

la question que je me  posais concerné le "rows=0" 
Seq Scan on band bands0_  (cost=0.00..115113.70 rows=5 width=333) (actual time=727.182..727.182 rows=0 loops=1)
pourquoi l'explain analyse ne reference t-il pas le nb d'enregistrement trouvés ?

Hors ligne

#6 04/03/2015 16:04:45

rjuju
Administrateur

Re : Explain avec rows=0 et Seq san

Seq Scan on band bands0_  (cost=0.00..115113.70 rows=5 width=333) (actual time=727.182..727.182 rows=0 loops=1)
pourquoi l'explain analyse ne reference t-il pas le nb d'enregistrement trouvés ?

Il le fait, et n'en a trouvé aucun pour lequel band.fk_metadata = '4b364394-6f7f-4249-acb4-2b16ce99f70d'.

Hors ligne

Pied de page des forums