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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

4312閲覧

mysqlでパーティションについて

enigumalu

総合スコア192

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/07/27 09:34

編集2017/07/27 10:27

パーティションを張りたいのですがPARTITIONに指定するカラムってPRIMARYのカラムじゃないといけないのでしょうか。
下記のようなエラーが出たので意味合い的にPRIMARYの項目じゃないといけないと思っているのですが、その理由が知りたいです。
Error Code: 1503. A PRIMARY KEY must include all columns in the table's partitioning function

もうひとつパーティションを削除するとデータが消えると聞いたのですが消えてしまうのは
p2015で指定している全テーブルのデータになるのでしょうか?それともlist_rtxのデータだけでしょうか?
ALTER TABLE list_rtx DROP PARTITION p2015;
データを残すにはREMOVEを利用すればよいのでしょうか?
ALTER TABLE list_rtx REMOVE PARTITIONING;
全体的にパーティションの理屈がわかっていないためわかりやすい参考情報があれば幸いです

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

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

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

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

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

guest

回答3

0

ベストアンサー

パーティションを張りたいのですがPARTITIONに指定するカラムってPRIMARYのカラムじゃないといけないのでしょうか。

⇒厳密には以下のようなSQLであれば、作成できるので「いいえ」です。

SQL

1-- DROP TABLE IF EXISTS t_no_pk; 2CREATE TABLE IF NOT EXISTS t_no_pk( 3 c1 INT 4 , c2 INT 5) 6PARTITION BY RANGE(c1) ( 7 PARTITION p0 VALUES LESS THAN (10), 8 PARTITION p1 VALUES LESS THAN (20), 9 PARTITION p2 VALUES LESS THAN (30), 10 PARTITION p3 VALUES LESS THAN MAXVALUE 11);

ですが、パーティションの用途として、
基本的にはプライマリーキーや一意キーを推奨します。
※MAXVALUEを使わなければ、該当カラムに登録の範囲制限をかけるために使えるかもしれませんが、
わざわざ、テーブル(しかもパーティション)でやる必要はないですね。。。

下記のようなエラーが出たので意味合い的にPRIMARYの項目じゃないといけないと思っているのですが、その理由

⇒上記のようにプライマリーキーでなくても作成はできます。
ただ、プライマリーキーやユニークキーが存在するテーブルなら、
パーティション(ファイル分割)を行う場合、
その項目を使わない手はないでしょう?
という事だと思います。

たとえば、1冊の本(テーブル)をイメージして頂ければ、
1頁、2頁、・・・と情報記載されていて、
いざ分割する時に、適当なページ数で分割した方が分割・結合しやすいのに、
わざわざページの中の特定の情報部分で分割する必要ないですよね?
といったところでしょうか。

※プライマリーキーがないということは、1つの大きなページに情報がたくさんちらばっているのを、
特定の情報部分で並べて分割するイメージです。

p2015で指定している全テーブルのデータになるのでしょうか?それともlist_rtxのデータだけでしょうか?
ALTER TABLE list_rtx DROP PARTITION p2015;

⇒list_rtxテーブルにパーティションを作った場合、
list_rtxテーブルの中のデータがp2014,p2015,p2016,p2017,…という名前で分割されているイメージです。
上記SQLでは、list_rtxテーブルの中のデータのうち、パーティション名p2015の条件のデータがパーティションと共に、データも全て削除されます。

SQL

1-- 上記SQLを実行した場合のお試し用SQL 2INSERT INTO t_no_pk 3values 4( -50, NULL) 5,( 0, NULL) 6,( 10, NULL) 7,( 20, 0) 8,( 30, 0) 9,( 40, 0) 10,( 2147483647, 0) 11,( NULL, 0) 12; 13-- mysqlのdataディレクトリの中を見るとより理解が深まると思います。 14 15SELECT * FROM t_no_pk; 16 17ALTER TABLE t_no_pk 18 DROP PARTITION p3; 19-- mysqlのdataディレクトリの中を見るとより理解が深まると思います。 20 21SELECT * FROM t_no_pk; 22 23show create table t_no_pk; 24

データを残すにはREMOVEを利用すればよいのでしょうか?
ALTER TABLE list_rtx REMOVE PARTITIONING;

⇒はい、そうです。

SQL

1ALTER TABLE t_no_pk REMOVE PARTITIONING; 2-- mysqlのdataディレクトリの中を見るとより理解が深まると思います。 3 4SELECT * FROM t_no_pk; 5 6show create table t_no_pk; 7-- mysqlのdataディレクトリの中を見るとより理解が深まると思います。 8

全体的にパーティションの理屈がわかっていないため

⇒実際に実行して試してみるのも手です。

投稿2017/07/27 13:51

tomari_perform

総合スコア760

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

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

0

パーティショニングキーは PRIMARY KEY または UNIQUE KEY である必要があります。

テーブルのすべての一意キーは、テーブルのパーティショニング式内のすべてのカラムを使用する必要があります(これには、テーブルの主キーも含まれます (自明で一意キーであるため)

MySQL :: MySQL 5.6 リファレンスマニュアル :: 19.6.1 パーティショニングキー、主キー、および一意キー


パーティションを削除した場合は、そのパーティションに格納されているレコードごと削除されます。なお特定パーティションの削除は HASH または KEY パーティションのみで実行できます。

削除されたパーティションに格納されていたデータはすべて破棄されます。MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.1.7.1 ALTER TABLE パーティション操作

パーティショニングをやめたい場合は REMOVE PARTITIONING を使います。


わかりやすい参考情報

まずは MySQL 公式ドキュメントを読みましょう。Qiita などにも大変判りやすい解説記事がたくさんあがっています。

投稿2017/07/27 12:56

miyahan

総合スコア3095

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

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

0

パーティショニングに使用するカラムは、プライマリキーだけでなくテーブルに設定されている全てのユニークキーにも含まれている必要があります。しかし、この制約が設けられている明確な理由は見つけられませんでした。

19.6.1 パーティショニングキー、主キー、および一意キー

DROP PARTITIONでデータが削除されるのは、指定したパーティションのみに限定されます。REMOVE PARTITIONINGはパーティショニングをやめて通常のテーブルに戻すためのもので、データは削除されません。

13.1.7.1 ALTER TABLE パーティション操作

パーティショニングとは、テーブルのデータを入れるファイルを複数に分割する機能です。以下の記事を読むとイメージしやすいかと思います。

高速処理化!MySQLのパーティショニング機能を使ってみよう

投稿2017/07/27 12:46

SVC34

総合スコア1149

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問