Travailler avec des tables temporaires

Améliorer les performances des requêtes dans PostgreSQL

Amy McCarty

Instructor

À propos des tables temporaires

Quoi ?

  • Table éphémère

Pourquoi ?

  • Stockage transitoire
  • Session de base de données
  • Requêtes multiples
  • Spécifique à l'utilisateur
  • Tables lentes

Comment ?

  • CREATE TEMP TABLE name AS
Améliorer les performances des requêtes dans PostgreSQL

Structure d'une table TEMP

holiday holiday_type country_code
Epiphany religious CZE
Epiphany religious FRA
Epiphany religious USA
Thanksgiving secular USA
CREATE TEMP TABLE usa_holidays AS
  SELECT holiday, holiday_type
  FROM world_holidays
  WHERE country_code = 'USA';

 

 

 

Jours fériés USA

holiday holiday_type
Epiphany religious
Thanksgiving secular
Améliorer les performances des requêtes dans PostgreSQL

Tables volumineuses et lentes

  • Lent car très nombreux enregistrements

 

Statistiques World Holidays USA Holidays
Type table temp table
# Lignes 591 444 25
Améliorer les performances des requêtes dans PostgreSQL

Vues complexes et lentes

  • Lent à cause de la logique de vue

Schéma montrant que des tables par pays alimentent la vue World Holidays

Statistiques World Holidays USA Holidays
Type view temp_table
# Lignes 591 444 25
Sources 195 1
  • Les tables contiennent les données
  • Les vues contiennent les instructions vers les données
Améliorer les performances des requêtes dans PostgreSQL

Joindre de nombreuses tables à une seule

CREATE TEMP TABLE usa_holidays AS
  SELECT holiday, holiday_type
  FROM world_holidays
  WHERE country_code = 'USA';
WITH religious AS 
(   SELECT usa.holiday, r.initial_yr
     , r.celebration_dt
    FROM religious r
    INNER JOIN usa_holidays usa 
      USING (holiday)  )
, secular AS 
(   SELECT usa.holiday, s.initial_yr
     , s.celebration_dt
    FROM secular s
    INNER JOIN usa_holidays usa
      USING (holiday)  )
, ...
Améliorer les performances des requêtes dans PostgreSQL

ANALYZE

 

1 CREATE TEMP TABLE usa_holidays AS
2 SELECT holiday, holiday_type
3 FROM world_holidays
4 WHERE country_code = 'USA';
5 
6 ANALYZE usa_holidays;
7 
8 SELECT * FROM usa_holidays

Planificateur de requête (étapes d'exécution)

Plusieurs chefs autour d'une grande marmite

  • Statistiques depuis pg_statistics
  • Estimations d'exécution
Améliorer les performances des requêtes dans PostgreSQL

Passons à la pratique !

Améliorer les performances des requêtes dans PostgreSQL

Preparing Video For Download...