web-dev-qa-db-ja.com

複数列のパーティション化

2つの列でパーティション分割する必要がある非常に大きなテーブルがあります。 1つの列はIDであり、パーティショニングは非常に単純です。 2番目のパーティション分割は、日付列で毎日行う必要があります。このテーブルには最大30日間のデータを保持する必要があり、30日より古いパーティションは削除する必要があります。このシナリオでパーティショニングを行うための最良の方法は何ですか。

ありがとう

4
jayjayjay

「30日後にパージ」の使用例は、PARTITIONingの優れた使用法です。 (私が知っているのは、わずか4つのユースケースの1つです。)

PRIMARY KEY(id, date)
...
PARTITION BY RANGE (TO_DAYS(date))
(...)

その後、毎日行います

ALTER TABLE .. DROP PARTITION ...
ALTER TABLE .. REORGANIZE PARTITION future INTO
           PARTITION ...,  -- preparing for tomorrow
           PARTITION future ...;  -- this partition should stay empty.

パーティションの詳細 -これは、@ mootmootが提供する@jkavalikの「必須のリーディング」の続きです。

注:サブパーティションはありません。 idによるパーティションはありません。 account_idによるパーティションはありません。大きな利点は、大きな夜間DELETEDROP PARTITION経由で即座に実行できることです。

おそらくaccount_idに何らかのインデックスが必要です。複合インデックスを検討してください。

これについてさらに説明する必要がある場合は、SHOW CREATE TABLE(パーティション化の有無にかかわらず)およびメインクエリを提供してください。

4
Rick James