Vous n'êtes pas identifié(e).
Pages : 1
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
Rebonjour
correctif la valeur du statistique_target est de 500 et non de 5400
Hors ligne
Avez-vous pensé à la classe d'opérateur pour la création de l'index ?
Guillaume.
Hors ligne
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.
Julien.
https://rjuju.github.io/
Hors ligne
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
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'.
Julien.
https://rjuju.github.io/
Hors ligne
Pages : 1