MySQLパーティショニング

f:id:varmil:20151213000151p:plain

勘違いしておりました。テーブル名の末尾に _1 とかつけるテーブル分割がパーティショニングだと思っておりました。。。

それはどちらかと言うとシャーディング(水平分割)ですね

実際には、SQL(ALTER文)だけで実行可能な機能でした。

有効なケース

  • カーディナリティが低いカラムを使って検索する場合

nippondanji.blogspot.jp

制約

  • テーブルのユニークなキーを含めていなければいけない

liginc.co.jp

ログテーブルにも有効

  • DELETE はくっそ重いがパーティショニングしておけば DROP できる

ログ系のテーブルでは基本は新しくinsertされた行への参照がほとんどになる様に設計すべきです。何よりもこれが大事。ログ系のテーブルは放っておけばどんどんサイズが大きくなります。アクセスされるデータの量が昔のものまで満遍なく存在していると、buffer poolというメモリキャッシュに載せるべきデータが時間と共にどんどん増えていき、すぐにメモリから溢れてIOが発生します。IOは怖いです。

engineer.dena.jp