-
INDEX et optimisation
bonjour,
J'ai 2 tables : table1 et table2. chacune a 40 000 lignes. il y a 4 champs sur chacune des 2 tables.
table1
id_tab1, nom_tab1, date_tab1, desc_tab1
table2
id_tab2, detail_tab2, encoredudetail_tab2, id_tab1
N'étant pas le concepteur des 2 tables, je ne peux qu'ajouter des index (c'est déjà pas mal !!). Il n'y a pas de clé primaire, ni de clé étrangère.
La raison est que les données arrive en brut dans les 2 tables et que les doublons nous interressent.
Si je fais un
select * FROM table1, table2 WHERE table1.id_tab1 = table2.id_tab1
Ca prend beaucoup de temps.
En faisant un explain, on voit bien qu'il y a des reqscan sur les table2.
J'ai créé donc 2 index : un sur table1.id_tab1 et l'autre sur table2.id_tab1.
Je fais un vacuum, et je relance.... Pareil !! Il fait encore des reqscan.
D'où vient le problème ??? Est il possible d'empêcher les reqscan
A+
-
As-tu fait un vacuum ou un vacuum analyze ?
Les indexes ont un coût, ils ne sont pas forcément utilisés si l'optimiseur Postgresql estime que l'accès full aux tables est plus rapide
Généralement s'il faut retourner au moins 25-30% des lignes de la table, l'accès full est moins coûteux
Quel est le plan d'exécution exact de ta requête ?
Combien de lignes dans chacune des 2 tables seront prise en compte pour ta requête ?
-
Les requêtes indiquées ci dessus ne mentionnaient pas qu'il s'agissait de vue.
Des ANALYSE ont été fait. Il s'agit des distincts. En fait, (et c'est normal), il ne faut pas utiliser de distinct dans les vues mais uniquement lors des appels de vue.
Perf ok,
A+