一時テーブルの活用

PostgreSQLでクエリ性能を改善する

Amy McCarty

Instructor

一時テーブルの基礎

何か?

  • 短命なテーブル

なぜ?

  • 一時的保存
  • データベースセッション内
  • 複数クエリで再利用
  • ユーザーごと
  • 遅いテーブル対策

方法

  • CREATE TEMP TABLE name AS
PostgreSQLでクエリ性能を改善する

一時テーブルの構造

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';

 

 

 

USA Holidays

holiday holiday_type
Epiphany religious
Thanksgiving secular
PostgreSQLでクエリ性能を改善する

大規模テーブルは遅い

  • レコード数が多く遅い

 

Table Stats World Holidays USA Holidays
Type table temp table
# Rows 591,444 25
PostgreSQLでクエリ性能を改善する

複雑なビューは遅い

  • ビューのロジックで遅い

各国テーブルが World Holidays ビューに集約される図

Table Stats World Holidays USA Holidays
Type view temp_table
# Rows 591,444 25
Sources 195 1
  • テーブルはデータ本体
  • ビューはデータへの手順
PostgreSQLでクエリ性能を改善する

多数テーブルを1つに結合

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)  )
, ...
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

クエリプランナ(実行手順)

大鍋を囲む複数のシェフ

  • pg_statistics の統計
  • 実行時見積もり
PostgreSQLでクエリ性能を改善する

実践してみましょう!

PostgreSQLでクエリ性能を改善する

Preparing Video For Download...