web-dev-qa-db-ja.com

mysqlに必要に応じて自動的にパーティションを作成させる方法はありますか?

列、日付、タグ、国を含む大きなテーブルがあります。テーブルをYEAR(date), tag, countryでパーティション分割したいのですが、mysqlにその場でパーティションを作成させたいと思います。つまり、パーティションのセットアップ時にパーティションの数を事前に設定したくないので、将来新しいパーティションを追加することを忘れないようにする必要があります。

2
bpeikes

なぜパーティションを使いたいのですか? 「大きい」は理由ではありません。パーティション化を行わなくても問題なく機能する10億行のテーブルを見たことがあります。 PARTITIONingがメリットをもたらす可能性はほとんどありません。

YEAR(date)に基づいて「古い」データを削除する場合は、パーティショニングの良いユースケースです。

詳細な説明 は、最も古いパーティションをDROPする方法などを示しています。

1
Rick James

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にインデックスが付けられているとしましょう。拡張された説明計画に従って有効である必要があります。コードをプッシュする前にこれを確認してください。

0
Mannoj