【SQL】 SQL アンチパターン ~ Metadata Tribbles(メタデータ大増殖) ~

■ はじめに

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