列、日付、タグ、国を含む大きなテーブルがあります。テーブルをYEAR(date), tag, country
でパーティション分割したいのですが、mysqlにその場でパーティションを作成させたいと思います。つまり、パーティションのセットアップ時にパーティションの数を事前に設定したくないので、将来新しいパーティションを追加することを忘れないようにする必要があります。
なぜパーティションを使いたいのですか? 「大きい」は理由ではありません。パーティション化を行わなくても問題なく機能する10億行のテーブルを見たことがあります。 PARTITIONing
がメリットをもたらす可能性はほとんどありません。
YEAR(date)
に基づいて「古い」データを削除する場合は、パーティショニングの良いユースケースです。
詳細な説明 は、最も古いパーティションをDROP
する方法などを示しています。
3つ以下の目的を確実にするために、これに答えてみましょう。
1). Which partition can be used for mentioned use case ? 2). It should help in removing old partition. 3). It should help in effective querying by picking the partition.
1). Which partition can be used for mentioned use case ?
Mysqlにカテゴリを決定させるためのハッシュパーティション。しかし、ここではハッシュの整数列を試すことができます。
YEAR(日付)= 4最大桁数
タグ= 4桁
国= 2最大桁数(これを国コードに変換します)
Part_tokenという新しい列を追加し、データ型をInteger Unsignedに設定します。範囲は0〜4294967295です。値を維持するための最大予測は4294年目であり、2017年です。
2). It should help in removing old partition.
不要になった場合は、part_tokenを選択して古いパーティションを削除できます。古いパーティションを削除する前に、スレーブでバックアップを実行してみてください。
3). It should help in effective querying by picking the partition.
Mysql 5.6以降では、照会するパーティションを明示的に指定でき、パーティション内のデータベースのインデックスをさらに照会できます。
I.E.
SELECT * FROM big_table PARTITION(2017091922)WHERE user_id = '12111';
User_idにインデックスが付けられているとしましょう。拡張された説明計画に従って有効である必要があります。コードをプッシュする前にこれを確認してください。