質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

1回答

2649閲覧

MySQLのパーティションの制約について

kinme

総合スコア843

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

5クリップ

投稿2015/08/04 00:44

お世話になります

カーディナリティの低いカラムにはインデックスが有効でないというのは周知の事実かと思います。
そこでよく「カーディナリティの低いカラムにはパーティションが有効」という文面を見かけるのですが、
MySQLの場合(MySQLだけかはわかりませんが)パーティションのキーが全ての主キー/ユニークキーに含まれていないといけないという制約があるかと思います。
かといってパーティションのためにカーディナリティの低いカラムに主キーやユニークキーを付けたら本来のユニーク性が失われることになるかと思います。
このような課題を解決できる上手い設計方法とかはあるのでしょうか?

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

基本的なテーブル設計は、「サロゲートキーでしか一意に特定できないテーブルは作ってはいけない」です。
もちろん、これは理想論で現実ではオートインクリメント等を利用したサロゲートキーをPKにするケースが一般的であり、それをサポートしているフレームワークも多くあります。
ですので、こういう設計思想のテーブルではパーティショニングは元から検討されていないでしょう。

パーティショニングの検討は、
1)どの項目で
2)どの単位で
3)いくつ区切るか→1年後、3年後、5年後、7年後のレコード数は?
とテーブル設計の段階で絡んでいなければなりません。

例)
一日10万件の商品が売れるECサイトの在庫変動を格納するテーブル
→この場合、同じ商品が同時に売れてしまうこともあるので、
PKの持ち方はサロゲートキーに頼らざるを得ません。
→しかし、PKに持つにはサロゲートキーだけではなく、
「商品ID、在庫変動日時、サロゲートキー」と組み合わせるのが本来の姿でしょう。
→この時、「在庫変動日時」は、年月のみで見た場合比較的カーディナリティの低いカラムとみなすことが出来ます。
→一日10万件の処理では、1ヶ月の区切り(300万レコード)が限界か?
なので、在庫変動日時に対し、年月でパーティショニングした時の性能検証を考える。
(例なのであまり深く考えて設計していないので、もしかしたら購買者のIDが取得出来て在庫変動のキーに購買者をつけることでPKにできるかもしれません)

投稿2015/08/25 05:34

anonymouskawa

総合スコア856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kinme

2015/08/27 14:34

なるほど、極力サロゲートキーは使わず、 サロゲートキーが必要な場合はサロゲートキー+他カラムの複合にする、ですか。 サロゲートキーを使って複合という発想はなかったです。 勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問