■ はじめに
Wise men learn by other men's mistakes; fools by their own.
https://dk521123.hatenablog.com/entry/2016/07/02/212547
の続き。
■ 問題点
* 例えば、日々データが追加されるテーブル(例えば、「売上 Sales」「発注 Orders」「支払 Payments」) があったとする。そのデータがすごく増えた場合、検索スピードが落ちる訳で... => その対策として、「年ごとにテーブル分割する」をとったら、これが、アンチパターンっと。
■ 解決策
* 水平・垂直パーティショニング を使用する
パーティショニング とは?
=> データを複数に分割して格納すること # 「テーブル設計」でデータを分割するんじゃなくて、 # 「DBの機能・パーティショニング」で分割するって話。
■ サンプル
ダメな例
-- テーブル -- ・・・ CREATE TABLE payment_2016 ( id char(4) NOT NULL PRIMARY KEY COMMENT '支払ID', salary_date date NOT NULL COMMENT '支払日', employee_id bigint NOT NULL COMMENT '従業員ID', salary int(11) NOT NULL COMMENT '給与', FOREIGN KEY (employee_id) REFERENCES employee(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='2016年度 支払'; CREATE TABLE payment_2015 ( id char(4) NOT NULL PRIMARY KEY COMMENT '支払ID', salary_date date NOT NULL COMMENT '支払日', employee_id bigint NOT NULL COMMENT '従業員ID', salary int(11) NOT NULL COMMENT '給与', FOREIGN KEY (employee_id) REFERENCES employee(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='2015年度 支払'; -- ・・・ -- 年度ごとにテーブルを作成するって話。
参考文献
http://penguinlab.jp/wiki/SQL_%E3%82%A2%E3%83%B3%E3%83%81%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3#Metadata_Tribbles
http://qiita.com/Aiita/items/1eda0a10a6aa305379b5
http://d.hatena.ne.jp/asakichy/20160701/1467324439
関連記事
SQL アンチパターン ~ 目次 ~
https://dk521123.hatenablog.com/entry/2016/07/02/212547