データ量が昔と比較して増えてきたからか、最近はパーティションの話を良く聞くので、
簡易的に再確認してみました。いざ確認してみると、色々と忘れている事もあり頭がリフレッシュ出来ました。
パーティショニン種類に関しては、以下のサイトに詳しく出ているので参照してみて下さい。
また、MySQL5.6のマニュアルも日本語化されたので参考にしてみて下さい。
MySQL5.6日本語マニュアル
https://dev.mysql.com/doc/refman/5.6/ja/
19.2. パーティショニングタイプ
https://dev.mysql.com/doc/refman/5.6/ja/partitioning-types.html
——————————————————————————————–
※奥野さんのサイトにも書かれていますが、必ずしもパーティションを利用して、
パフォーマンスが良くなる事ばかりでは無いです。効率良くIndexが使えていたりデータによっては、
付けない方が良い事もあるので、先ずは検証環境で確認してみて下さい。
パーティショニングの使用例 – カーディナリティが低いカラムを使って検索する場合
http://nippondanji.blogspot.jp/2009/04/1.html
——————————————————————————————–
第19章 パーティション化
https://dev.mysql.com/doc/refman/5.6/ja/partitioning.html
19.6. パーティショニングの制約と制限
https://dev.mysql.com/doc/refman/5.6/ja/partitioning-limitations.html#partitioning-limitations-subpartitions
確認:バージョン
root@localhost [test]> select @@version; +-------------------------------------------+ | @@version | +-------------------------------------------+ | 5.6.24-enterprise-commercial-advanced-log | +-------------------------------------------+ 1 row in set (0.00 sec) root@localhost [test]>
プラグインで有効になっているか確認
root@localhost [test]> SELECT -> PLUGIN_NAME as Name, -> PLUGIN_VERSION as Version, -> PLUGIN_STATUS as Status -> FROM INFORMATION_SCHEMA.PLUGINS -> WHERE PLUGIN_TYPE='STORAGE ENGINE'; +--------------------+---------+----------+ | Name | Version | Status | +--------------------+---------+----------+ | binlog | 1.0 | ACTIVE | | MEMORY | 1.0 | ACTIVE | | MRG_MYISAM | 1.0 | ACTIVE | | CSV | 1.0 | ACTIVE | | MyISAM | 1.0 | ACTIVE | | ARCHIVE | 3.0 | ACTIVE | | FEDERATED | 1.0 | DISABLED | | InnoDB | 5.6 | ACTIVE | | BLACKHOLE | 1.0 | ACTIVE | | PERFORMANCE_SCHEMA | 0.1 | ACTIVE | | partition | 1.0 | ACTIVE | < --- こちらがACTIVEであれば利用可能 +--------------------+---------+----------+ 11 rows in set (0.01 sec) root@localhost [test]>
■ 標準的なRANGEパーティショニング
root@localhost [test]> show create table tbl_partition\G *************************** 1. row *************************** Table: tbl_partition Create Table: CREATE TABLE `tbl_partition` ( `member_id` varchar(40) NOT NULL, `platform` varchar(10) NOT NULL, `year` smallint(5) unsigned NOT NULL, `month` tinyint(2) unsigned NOT NULL, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`member_id`,`year`,`month`), KEY `idx_tbl_partition` (`year`), KEY `idx_tbl_partition_id` (`member_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 /*!50100 PARTITION BY RANGE (`year`) (PARTITION p2013 VALUES LESS THAN (2013) ENGINE = InnoDB, PARTITION p2014 VALUES LESS THAN (2014) ENGINE = InnoDB, PARTITION p2015 VALUES LESS THAN (2015) ENGINE = InnoDB, PARTITION p2016 VALUES LESS THAN (2016) ENGINE = InnoDB, PARTITION p2017 VALUES LESS THAN (2017) ENGINE = InnoDB, PARTITION p2018 VALUES LESS THAN (2018) ENGINE = InnoDB, PARTITION p2019 VALUES LESS THAN (2019) ENGINE = InnoDB, PARTITION p2020 VALUES LESS THAN (2020) ENGINE = InnoDB, PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */ 1 row in set (0.00 sec) root@localhost [test]> root@localhost [test]> explain partitions select * from tbl_partition where year = 2015; +----+-------------+---------------+------------+------+-------------------+-------------------+---------+-------+------+-------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------------+------------+------+-------------------+-------------------+---------+-------+------+-------+ | 1 | SIMPLE | tbl_partition | p2016 | ref | idx_tbl_partition | idx_tbl_partition | 2 | const | 2 | NULL | +----+-------------+---------------+------------+------+-------------------+-------------------+---------+-------+------+-------+ 1 row in set (0.00 sec) root@localhost [test]>
■ サブパーティション
https://dev.mysql.com/doc/refman/5.6/ja/partitioning-subpartitions.html
サブパーティションに関する問題
https://dev.mysql.com/doc/refman/5.6/ja/partitioning-limitations.html#partitioning-limitations-subpartitions
サブパーティションに関する問題 サブパーティションは HASH または KEY パーティショニングを使用する必要があります。サブパーティション化できるのは RANGE および LIST パーティションのみです。HASH および KEY パーティションはサブパーティション化できません。 現在のところ、SUBPARTITION BY KEY にはサブパーティショニングカラムを明示的に指定する必要がありますが、PARTITION BY KEY の場合は省略できます (その場合、テーブルの主キーカラムがデフォルトで使用されます)
root@localhost [test]> show create table tbl_sub_partition01\G *************************** 1. row *************************** Table: tbl_sub_partition01 Create Table: CREATE TABLE `tbl_sub_partition01` ( `member_id` int(11) DEFAULT NULL, `platform` varchar(10) NOT NULL, `purchased` date DEFAULT NULL, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 /*!50100 PARTITION BY RANGE ( YEAR(purchased)) SUBPARTITION BY HASH ( TO_DAYS(purchased)) SUBPARTITIONS 12 (PARTITION sub_y2010 VALUES LESS THAN (2010) ENGINE = InnoDB, PARTITION sub_y2011 VALUES LESS THAN (2011) ENGINE = InnoDB, PARTITION sub_y2012 VALUES LESS THAN (2012) ENGINE = InnoDB, PARTITION sub_y2013 VALUES LESS THAN (2013) ENGINE = InnoDB, PARTITION sub_y2014 VALUES LESS THAN (2014) ENGINE = InnoDB, PARTITION sub_y2015 VALUES LESS THAN (2015) ENGINE = InnoDB, PARTITION sub_y2016 VALUES LESS THAN (2016) ENGINE = InnoDB, PARTITION sub_y2017 VALUES LESS THAN (2017) ENGINE = InnoDB, PARTITION sub_y2018 VALUES LESS THAN (2018) ENGINE = InnoDB, PARTITION sub_y2019 VALUES LESS THAN (2019) ENGINE = InnoDB, PARTITION sub_y2020 VALUES LESS THAN (2020) ENGINE = InnoDB, PARTITION sub_y_max VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */ 1 row in set (0.00 sec) root@localhost [test]>
timestamp型などを利用すると、
”ERROR 1486 (HY000): Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed”というエラーになります。
root@localhost [test]> select * from tbl_sub_partition01; +-----------+----------+------------+---------------------+ | member_id | platform | purchased | updated_at | +-----------+----------+------------+---------------------+ | 1 | iphone | 2015-06-28 | 2015-06-30 11:53:32 | | 2 | iphone | 2015-06-29 | 2015-06-30 11:53:39 | | 3 | iphone | 2015-06-30 | 2015-06-30 11:53:47 | | 4 | iphone | 2015-07-01 | 2015-06-30 12:08:13 | | 5 | iphone6 | 2015-07-02 | 2015-06-30 12:08:26 | | 6 | iphone6 | 2015-07-03 | 2015-06-30 12:10:11 | | 7 | iphone3s | 2015-07-04 | 2015-06-30 12:10:27 | | 8 | iphone4s | 2015-07-05 | 2015-06-30 12:10:37 | | 9 | iphone4s | 2015-07-06 | 2015-06-30 12:10:46 | | 10 | iphone6s | 2015-07-07 | 2015-06-30 12:10:59 | +-----------+----------+------------+---------------------+ 10 rows in set (0.00 sec) root@localhost [test]> explain partitions select * from tbl_sub_partition01 where purchased = '2015-07-01'; +----+-------------+---------------------+------------------------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------------------+------------------------+------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | tbl_sub_partition01 | sub_y2016_sub_y2016sp5 | ALL | NULL | NULL | NULL | NULL | 2 | Using where | +----+-------------+---------------------+------------------------+------+---------------+------+---------+------+------+-------------+ 1 row in set (0.00 sec) root@localhost [test]>
パーティションにDATA DIRECTORYなどを指定する場合。
MyISAMで且つ、テーブル全体では無くSubpartition毎に指定しています。
root@localhost [test]> show create table tbl_sub_partition_dir\G *************************** 1. row *************************** Table: tbl_sub_partition_dir Create Table: CREATE TABLE `tbl_sub_partition_dir` ( `id` int(11) DEFAULT NULL, `purchased` date DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 /*!50100 PARTITION BY RANGE ( YEAR(purchased)) SUBPARTITION BY HASH ( TO_DAYS(purchased)) (PARTITION p0_dir VALUES LESS THAN (1990) (SUBPARTITION s0 DATA DIRECTORY = '/home/mysql/data' INDEX DIRECTORY = '/home/mysql/index' ENGINE = MyISAM, SUBPARTITION s1 DATA DIRECTORY = '/home/mysql/data' INDEX DIRECTORY = '/home/mysql/index' ENGINE = MyISAM), PARTITION p1_dir VALUES LESS THAN (2000) (SUBPARTITION s2 DATA DIRECTORY = '/home/mysql/data' INDEX DIRECTORY = '/home/mysql/index' ENGINE = MyISAM, SUBPARTITION s3 DATA DIRECTORY = '/home/mysql/data' INDEX DIRECTORY = '/home/mysql/index' ENGINE = MyISAM), PARTITION p2_dir VALUES LESS THAN MAXVALUE (SUBPARTITION s4 DATA DIRECTORY = '/home/mysql/data' INDEX DIRECTORY = '/home/mysql/index' ENGINE = MyISAM, SUBPARTITION s5 DATA DIRECTORY = '/home/mysql/data' INDEX DIRECTORY = '/home/mysql/index' ENGINE = MyISAM)) */ 1 row in set (0.01 sec) root@localhost [test]> system ls /home/mysql/data/ tbl_sub_partition_dir#P#p0_dir#SP#s0.MYD tbl_sub_partition_dir#P#p1_dir#SP#s2.MYD tbl_sub_partition_dir#P#p2_dir#SP#s4.MYD test tbl_sub_partition_dir#P#p0_dir#SP#s1.MYD tbl_sub_partition_dir#P#p1_dir#SP#s3.MYD tbl_sub_partition_dir#P#p2_dir#SP#s5.MYD root@localhost [test]> system ls /home/mysql/index/ tbl_sub_partition_dir#P#p0_dir#SP#s0.MYI tbl_sub_partition_dir#P#p1_dir#SP#s2.MYI tbl_sub_partition_dir#P#p2_dir#SP#s4.MYI tbl_sub_partition_dir#P#p0_dir#SP#s1.MYI tbl_sub_partition_dir#P#p1_dir#SP#s3.MYI tbl_sub_partition_dir#P#p2_dir#SP#s5.MYI root@localhost [test]>
DATAディレクトリーにシンボリックリンクが作成されています。
[root@GA01 test]# pwd /usr/local/mysql/data/test [root@GA01 test]# ls -l tbl_sub_partition_dir* lrwxrwxrwx. 1 mysql mysql 57 6月 30 13:31 tbl_sub_partition_dir#P#p0_dir#SP#s0.MYD -> /home/mysql/data/tbl_sub_partition_dir#P#p0_dir#SP#s0.MYD lrwxrwxrwx. 1 mysql mysql 58 6月 30 13:31 tbl_sub_partition_dir#P#p0_dir#SP#s0.MYI -> /home/mysql/index/tbl_sub_partition_dir#P#p0_dir#SP#s0.MYI lrwxrwxrwx. 1 mysql mysql 57 6月 30 13:31 tbl_sub_partition_dir#P#p0_dir#SP#s1.MYD -> /home/mysql/data/tbl_sub_partition_dir#P#p0_dir#SP#s1.MYD lrwxrwxrwx. 1 mysql mysql 58 6月 30 13:31 tbl_sub_partition_dir#P#p0_dir#SP#s1.MYI -> /home/mysql/index/tbl_sub_partition_dir#P#p0_dir#SP#s1.MYI lrwxrwxrwx. 1 mysql mysql 57 6月 30 13:31 tbl_sub_partition_dir#P#p1_dir#SP#s2.MYD -> /home/mysql/data/tbl_sub_partition_dir#P#p1_dir#SP#s2.MYD lrwxrwxrwx. 1 mysql mysql 58 6月 30 13:31 tbl_sub_partition_dir#P#p1_dir#SP#s2.MYI -> /home/mysql/index/tbl_sub_partition_dir#P#p1_dir#SP#s2.MYI lrwxrwxrwx. 1 mysql mysql 57 6月 30 13:31 tbl_sub_partition_dir#P#p1_dir#SP#s3.MYD -> /home/mysql/data/tbl_sub_partition_dir#P#p1_dir#SP#s3.MYD lrwxrwxrwx. 1 mysql mysql 58 6月 30 13:31 tbl_sub_partition_dir#P#p1_dir#SP#s3.MYI -> /home/mysql/index/tbl_sub_partition_dir#P#p1_dir#SP#s3.MYI lrwxrwxrwx. 1 mysql mysql 57 6月 30 13:31 tbl_sub_partition_dir#P#p2_dir#SP#s4.MYD -> /home/mysql/data/tbl_sub_partition_dir#P#p2_dir#SP#s4.MYD lrwxrwxrwx. 1 mysql mysql 58 6月 30 13:31 tbl_sub_partition_dir#P#p2_dir#SP#s4.MYI -> /home/mysql/index/tbl_sub_partition_dir#P#p2_dir#SP#s4.MYI lrwxrwxrwx. 1 mysql mysql 57 6月 30 13:31 tbl_sub_partition_dir#P#p2_dir#SP#s5.MYD -> /home/mysql/data/tbl_sub_partition_dir#P#p2_dir#SP#s5.MYD lrwxrwxrwx. 1 mysql mysql 58 6月 30 13:31 tbl_sub_partition_dir#P#p2_dir#SP#s5.MYI -> /home/mysql/index/tbl_sub_partition_dir#P#p2_dir#SP#s5.MYI -rw-rw----. 1 mysql mysql 8596 6月 30 13:31 tbl_sub_partition_dir.frm -rw-rw----. 1 mysql mysql 104 6月 30 13:31 tbl_sub_partition_dir.par [root@GA01 test]#
19.6.4. パーティショニングとロック
https://dev.mysql.com/doc/refman/5.6/ja/partitioning-limitations-locking.html
MySQL 5.6.6 はパーティションロックプルーニングを実装し、これによって多くの場合に不必要なロックが排除されます。
MySQL 5.6.6 以降では、パーティション化された MyISAM テーブルに対して読み取りまたは更新を行うほとんどのステートメントで、影響を受けるパーティションのみがロックされます。たとえば、MySQL 5.6.6 より前は、パーティション化 MyISAM テーブルからのSELECT でテーブル全体がロックされました。MySQL 5.6.6 以降は、SELECT ステートメントの WHERE 条件を満たす行を実際に含むパーティションのみがロックされます。これには、パーティション化された MyISAM テーブルに対する同時操作の速度および効率を向上させる効果があります。この改善は、多く (32 以上) のパーティションを持つ MyISAM テーブルを操作するときに特に顕著になります。
DATA DIRECTORY、INDEX DIRECTORY
http://dev.mysql.com/doc/refman/5.6/ja/create-table.html
InnoDB では、DATA DIRECTORY=’directory’ オプションを使用すると、MySQL データディレクトリ以外の場所に新しいInnoDB file-per-table テーブルスペースを作成できます。MySQL は、指定されたディレクトリ内にデータベース名に対応するサブディレクトリを作成し、さらにその中に新しいテーブルの .ibd ファイルを作成します。InnoDB テーブルで DATA DIRECTORY オプションを使用するには、innodb_file_per_table 構成オプションを有効にする必要があります。このディレクトリは、ディレクトリへの (相対パスではなく) フルパス名である必要があります。
詳細は、「テーブルスペースの位置の指定」を参照してください。
MyISAM テーブルを作成する場合は、DATA DIRECTORY=’directory’ 句、INDEX DIRECTORY=’directory’ 句、またはその両方を使用できます。これらは、それぞれ MyISAM テーブルのデータファイルとインデックスファイルを配置する場所を指定します。
InnoDB テーブルとは異なり、DATA DIRECTORY または INDEX DIRECTORY オプションで MyISAM テーブルを作成する場合、MySQL はデータベース名に対応するサブディレクトリを作成しません。各ファイルは、指定されたディレクトリ内に作成されます。
重要
https://bugs.mysql.com/bug.php?id=32091
テーブルレベルの DATA DIRECTORY および INDEX DIRECTORY オプションは、パーティション化されたテーブルでは無視されます。(Bug #32091)
■InnoDBで、SUBPARTITIONを指定せずに実行した場合
root@localhost [test]> CREATE TABLE `tbl_partition_innodb` ( -> `member_id` varchar(40) NOT NULL, -> `platform` varchar(10) NOT NULL, -> `year` smallint(5) unsigned NOT NULL, -> `month` tinyint(2) unsigned NOT NULL, -> `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, -> PRIMARY KEY (`member_id`,`year`,`month`), -> KEY `idx_tbl_partition` (`year`), -> KEY `idx_tbl_partition_id` (`member_id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DATA DIRECTORY = '/home/mysql/data'; Query OK, 0 rows affected (0.02 sec) root@localhost [test]> show create table tbl_partition_innodb\G *************************** 1. row *************************** Table: tbl_partition_innodb Create Table: CREATE TABLE `tbl_partition_innodb` ( `member_id` varchar(40) NOT NULL, `platform` varchar(10) NOT NULL, `year` smallint(5) unsigned NOT NULL, `month` tinyint(2) unsigned NOT NULL, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`member_id`,`year`,`month`), KEY `idx_tbl_partition` (`year`), KEY `idx_tbl_partition_id` (`member_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DATA DIRECTORY='/home/mysql/data/' 1 row in set (0.00 sec)
ALTERテーブルでパーティション化すると、DATA DIRECTORYは無効になりファイルは削除されます。
root@localhost [test]> Alter table tbl_partition_innodb PARTITION BY RANGE (`year`) -> (PARTITION p2013_innodb VALUES LESS THAN (2013) ENGINE = InnoDB, -> PARTITION p2014_innodb VALUES LESS THAN (2014) ENGINE = InnoDB, -> PARTITION p2015_innodb VALUES LESS THAN (2015) ENGINE = InnoDB, -> PARTITION p2016_innodb VALUES LESS THAN (2016) ENGINE = InnoDB, -> PARTITION p2017_innodb VALUES LESS THAN (2017) ENGINE = InnoDB, -> PARTITION p2018_innodb VALUES LESS THAN (2018) ENGINE = InnoDB, -> PARTITION p2019_innodb VALUES LESS THAN (2019) ENGINE = InnoDB, -> PARTITION p2020_innodb VALUES LESS THAN (2020) ENGINE = InnoDB, -> PARTITION pmax_innodb VALUES LESS THAN MAXVALUE ENGINE = InnoDB) ; Query OK, 0 rows affected (0.09 sec) Records: 0 Duplicates: 0 Warnings: 0 root@localhost [test]> show create table tbl_partition_innodb\G *************************** 1. row *************************** Table: tbl_partition_innodb Create Table: CREATE TABLE `tbl_partition_innodb` ( `member_id` varchar(40) NOT NULL, `platform` varchar(10) NOT NULL, `year` smallint(5) unsigned NOT NULL, `month` tinyint(2) unsigned NOT NULL, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`member_id`,`year`,`month`), KEY `idx_tbl_partition` (`year`), KEY `idx_tbl_partition_id` (`member_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 /*!50100 PARTITION BY RANGE (`year`) (PARTITION p2013_innodb VALUES LESS THAN (2013) ENGINE = InnoDB, PARTITION p2014_innodb VALUES LESS THAN (2014) ENGINE = InnoDB, PARTITION p2015_innodb VALUES LESS THAN (2015) ENGINE = InnoDB, PARTITION p2016_innodb VALUES LESS THAN (2016) ENGINE = InnoDB, PARTITION p2017_innodb VALUES LESS THAN (2017) ENGINE = InnoDB, PARTITION p2018_innodb VALUES LESS THAN (2018) ENGINE = InnoDB, PARTITION p2019_innodb VALUES LESS THAN (2019) ENGINE = InnoDB, PARTITION p2020_innodb VALUES LESS THAN (2020) ENGINE = InnoDB, PARTITION pmax_innodb VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */ 1 row in set (0.00 sec) root@localhost [test]>
※ Alter Tableでパーティショニングすると、
DATA DIRECTORY=’/home/mysql/data/’に存在していたibdファイルは削除されます。
■圧縮テーブルとパーティショニング
パーティション毎にストレージエンジンンが指定出来ますが、圧縮はパーティション毎に指定出来ません。
圧縮する場合はテーブル毎に指定してください。
root@localhost [test]> show create table tbl_partition_sample_zip\G *************************** 1. row *************************** Table: tbl_partition_sample_zip Create Table: CREATE TABLE `tbl_partition_sample_zip` ( `member_id` varchar(40) NOT NULL, `platform` varchar(10) NOT NULL, `year` smallint(5) unsigned NOT NULL, `month` tinyint(2) unsigned NOT NULL, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`member_id`,`year`,`month`), KEY `idx_tbl_partition` (`year`), KEY `idx_tbl_partition_id` (`member_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4 /*!50100 PARTITION BY RANGE (`year`) (PARTITION p2013 VALUES LESS THAN (2013) ENGINE = InnoDB, PARTITION p2014 VALUES LESS THAN (2014) ENGINE = InnoDB, PARTITION p2015 VALUES LESS THAN (2015) ENGINE = InnoDB, PARTITION p2016 VALUES LESS THAN (2016) ENGINE = InnoDB, PARTITION p2017 VALUES LESS THAN (2017) ENGINE = InnoDB, PARTITION p2018 VALUES LESS THAN (2018) ENGINE = InnoDB, PARTITION p2019 VALUES LESS THAN (2019) ENGINE = InnoDB, PARTITION p2020 VALUES LESS THAN (2020) ENGINE = InnoDB, PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */ 1 row in set (0.00 sec) root@localhost [test]>
補足メモ:
パーティションでは無いですが、パスを変更してデータを配置する方法。
MYSQL DATA DIRECTORY と INDEX DIRECTORYの指定
5.7からは複数テーブルを配置出来る、GENERAL TABLESPACEが利用可能になります。
InnoDB General Tablespace
root@localhost [test]> CREATE TABLE `tbl_DATA_DIRECTORY` ( -> `member_id` varchar(40) NOT NULL, -> `platform` varchar(10) NOT NULL, -> `year` smallint(5) unsigned NOT NULL, -> `month` tinyint(2) unsigned NOT NULL, -> `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, -> PRIMARY KEY (`member_id`,`year`,`month`), -> KEY `idx_tbl_DATA_DIRECTORY` (`year`), -> KEY `idx_tbl_DATA_DIRECTORY_id` (`member_id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DATA DIRECTORY = '/home/mysql/data'; Query OK, 0 rows affected (0.03 sec) root@localhost [test]>
■テーブル定義はDefault Dataディレクトリーで,データ用テーブルスペースが指定したディレクトリーに作成されます。
[root@GA01 test]# ls -l /usr/local/mysql/data/test/tbl_DATA* -rw-rw----. 1 mysql mysql 8712 6月 30 15:05 /usr/local/mysql/data/test/tbl_DATA_DIRECTORY.frm -rw-rw----. 1 mysql mysql 44 6月 30 15:05 /usr/local/mysql/data/test/tbl_DATA_DIRECTORY.isl [root@GA01 test]# ls -l /home/mysql/data/test/ 合計 192 -rw-rw----. 1 mysql mysql 131072 6月 30 15:05 tbl_DATA_DIRECTORY.ibd [root@GA01 test]#