パーティションテーブル
論理的には一つのテーブルだが、パーティションキーに基づき物理的には複数の「パーティション」に分割されるDBの機能。大規模テーブル(1000万行以上)、時系列データ、マルチテナントのシャーディングで使う。
PostgreSQLは10(2017年)から宣言的パーティショニングに対応し、MySQLは5.1からある。分割の方式は、RANGE(日付や数値の範囲)、LIST(特定の値)、HASH(均等に分散)の三つ。利点は、パーティションキーでWHERE条件を指定したクエリが該当パーティションだけを走査するパーティションプルーニングだ。保守面では、古いパーティションの削除がO(1)で済み、O(N)のDELETEよりずっと速い。
代償もある。クエリプランナが複雑になり、パーティションをまたぐ外部キーは扱いにくく、ORMの対応もまちまちだ。ただしPostgreSQL 11以降は外部キーとインデックスに対応した。典型例は月ごとに分割したログテーブルで、12か月前のデータを一瞬で捨てられる。