このセクションでは,MySQLパティショニングサポトでの現在の制約と制限に。
禁止されている構造体次の構造体はパティショニング式で許可されません。
ストアドプロシジャ,ストアドファンクション,udf,またはプラグ。
宣言された変数またはユザ変数。
パティショニング式で許可されるSQL関数のリストに,セクション19.6.3 "関数に関連するパティショニング制限"を参照してください。
算術および論理演算子算術演算子+
、-
,および*
の使用は,パティショニング式で許可されます。ただし,結果は整数値または零
である必要があります(この章のほかの場所で説明しているように,(线性)的关键
パティショニングの場合を除きます。詳細は,セクション19.2 "パティショニングタプ"を参照してください)。
DIV
演算子もサポトされますが,/
演算子は許可されません。(Bug #30188, Bug #33182)。
ビット演算子|
、&
、^
、<<
、>>
,および~
はパティショニング式では許可されません。
处理程序ステトメントMySQL 5.6では;处理程序
ステトメントはパティション化されたテブルでサポトされません。
サバSQLモドユーザー定義パーティショニングを使用するテーブルは,それらが作成された時点で有効だったSQLモードを保持しません。セクション5.1.7 "サバSQLモド"で説明したように,多くのMySQL関数および演算子の結果はサーバーSQLモードに従って変更されることがあります。このため,パーティション化されたテーブルの作成後の任意の時点にSQLモードを変更すると,そのようなテーブルの動作が大きく変わることがあり,データの破損または損失が発生しやすくなることがあります。これらの理由により,パーティション化されたテーブルを作成したあとにサーバーSQLモードを決して変更しないことが強く推奨されています。
例次の例は,サーバーSQLモードを変更したことによる,パーティション化されたテーブルの動作の変化をいくつか示しています。
エラ処理次のように,パティショニング式が
、列
DIV 0
などのいずれかであるパティション化されたテブルを作成するとします。列
国防部0CREATE TABLE tn (c1 INT) -> PARTITION BY LIST(1 DIV c1) (-> PARTITION p0 VALUES IN (NULL), -> PARTITION p1 VALUES IN (1) ->);查询OK, 0行受影响(0.05秒)
ゼロで除算した結果に対するMySQLのデフォルト動作は,エラを発生させずに
零
を返すことです。mysql >选择@@sql_mode;+------------+ | @@ sql_mode | +------------+ | | +------------+ 1行集(0.00秒)mysql >插入tn值(空)(0)(1);查询OK, 3 rows affected (0.00 sec) Records: 3 duplicate: 0 warning: 0
ただし,ゼロによる除算をエラーとして扱い,厳密なエラー処理を適用するようにサーバーSQLモードを変更すると,次のように同じ
插入
ステトメントが失敗します。mysql >设置sql_mode =“STRICT_ALL_TABLES, ERROR_FOR_DIVISION_BY_ZERO”;查询OK, 0 rows affected (0.00 sec) mysql> INSERT INTO tn VALUES (NULL), (0), (1);错误1365(22012):除0
テブルアクセス可能性サーバーSQLモードを変更することによって,パーティション化されたテーブルが使用できなくなることがあります。次の
创建表
ステトメントは,NO_UNSIGNED_SUBTRACTION
モドが有効である場合にのみ,正常に実行できます。mysql >选择@@sql_mode;+------------+ | @@sql_mode | +------------+ | | +------------+ 1 row in set (0.00 sec) mysql> CREATE TABLE tu (c1 BIGINT UNSIGNED) -> PARTITION BY RANGE(c1 - 10) (- > PARTITION p0 VALUES LESS THAN (-5), -> PARTITION p1 VALUES LESS THAN (0), -> PARTITION p2 VALUES LESS THAN (5), -> PARTITION p3 VALUES LESS THAN (10), -> PARTITION p4 VALUES LESS THAN (MAXVALUE) ->);错误1563 (HY000):分区常量超出分区函数域mysql>设置sql_mode=' no_unsigned_minus ';查询OK, 0 rows affected (0.00 sec) mysql> SELECT @@sql_mode;+-------------------------+ | @@ sql_mode | +-------------------------+ | NO_UNSIGNED_SUBTRACTION | +-------------------------+ 1行组(0.00秒)mysql >创建表涂(c1 BIGINT无符号)- >分区的范围(c1 - 10) (p0 - >分区值小于(5),- - - - - - >分区p1值小于(0)- >分区p2值小于(5),- - - - - - >分区p3值小于(10),- - - - - - >分区p4值小于(执行)- >);查询OK, 0行受影响(0.05秒)
你
を作成したあとにNO_UNSIGNED_SUBTRACTION
サバSQLモ,このテ。mysql >设置sql_mode = ";查询OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM tu;错误1563 (HY000):分区常量是超出分区功能域mysql> INSERT INTO tu VALUES (20);错误1563 (HY000):分区常量超出了分区函数域
サバSQLモ,パ。マスターとスレーブでSQLモードが異なると,パーティショニング式が違って評価されることがあります。これにより,指定されたテーブルのマスターのコピーとスレーブのコピーでパーティション間のデータ配分が違ってくることがあり,マスターで成功するパーティション化されたテーブルへの挿入がスレーブで失敗することさえあります。最適な結果を得るために,マスタとスレSQLモ。
パフォマンス考慮事項パティショニング操作のパフォマンスへの影響の一部を次のリストに示します。
ファ邮箱ルシステム操作パティショニングおよび再パティショニング操作(
分区的……
、重组分区
,または删除分区
を指定したALTER TABLE
など)は,それらの実装のファ电子书ルシステム操作に依存します。これは,これらの操作の速度が,ファイルシステムのタイプと特性,ディスク速度,スワップ領域,オペレーティングシステムによるファイル処理効率,ファイル処理に関連するMySQLサーバーのオプションと変数などの要因に影響されることを意味します。特に,large_files_support
が有効になっていて,open_files_limit
が適切に設定されていることを確認してください。MyISAM
ストレジエンジンを使用するパティション化されたテブルの場合,myisam_max_sort_file_size
を増やすとパフォマンスが向上することがあります。innodb_file_per_table
を有効にすることで,InnoDB
テブルを使用するパティショニングおよび再パティショニング操作の効率が向上することがあります。パティションの最大数も参照してください。
テブルロックテーブルに対してパーティショニング操作を実行する処理は,テーブルに対して書き込みロックを設定します。そのようなテブルからの読み取りは比較的影響を受けません。保留中の
插入
および更新
操作は,パティショニング操作が完了するとすぐに実行されます。ストレジエンジンパ,ティショニング操作,クエリ,および更新操作は通常,
InnoDB
またはNDB
テブルよりMyISAM
テブルで高速である傾向があります。ンデックス、パニングパーティション化されていないテーブルと同様に,インデックスを適切に使用することで,パーティション化されたテーブルに対する照会速度が大幅に向上することがあります。また,パティション化されたテブルおよびこれらのテブルに対するクエリをパティションプルニングの利点を活用するように設計することで,パフォマンスが劇的に向上することがあります。詳細は,セクション19.4 "パティションプルニング"を参照してください。
econンデックスコンディションプッシュダウンは,パ。セクション8.2.1.6 " econfンデックスコンディションプッシュダウンの最適化"を参照してください。
加载数据のパフォマンスMySQL 5.6では;
加载数据
はパフォマンスを向上させるためにバッファリングを使用します。これを実現するために,バッファーがパーティションごとに130 kバイトメモリーを使用することを認識してください。
パティションの最大数MySQL 5.6.7より前は,NDB
ストレジエンジンを使用しないテブルで可能な最大パティション数は1024でした。MySQL 5.6.7以降は,この制限は8192パティションに増えています。MySQL服务器バージョンにかかわらず、この最大数にはサブパーティションが含まれます。
NDB
ストレージエンジンを使用するテーブルのユーザー定義パーティションの最大数は,使用されているMySQL集群ソフトウェアのバージョン,データノードの数,およびその他の要因に応じて決まります。詳細は,新开发银行とユザ定義のパティション化を参照してください。
多数のパティション(ただし,最大数より少ない)を持,有错误…from存储引擎:打开文件时资源不足などのエラメッセジが表示される場合は,open_files_limit
システム変数の値を増やすことによってこの問題に対処できることがあります。ただし,これはオペレーティングシステムによって異なるため、すべてのプラットフォームで可能または推奨されるとはかぎりません。詳細は、セクションB.5.2.18 " '文件'が見,および同様のエラ"を参照してください。場合によっては,多数の(数百の)パーティションを使用することがほかの問題のために推奨されないこともあり,より多くのパーティションを使用することが自動的に良い結果となるとはかぎりません。
ファ邮箱ルシステム操作も参照してください。
クエリキャッシュがサポトされないクエリキャッシュはパティション化されたテブルではサポトされません。MySQL 5.6.5以降は,クエリーキャッシュはパーティション化されたテーブルを使用するクエリーで自動的に無効になり,そのようなクエリーで有効にすることはできません。(错误# 53775)
パティションごとのキキャッシュMySQL 5.6では;缓存索引
および将索引加载到缓存中
ステトメントを使用することで,キティション化されたMyISAM
テブルでサポトされます。キーキャッシュは1つ複数,またはすべてのパーティションに定義でき,1つ複数,またはすべてのパーティションのインデックスをキーキャッシュにプリロードできます。
パティション化されたInnoDBテInnoDB
ストレジエンジンを使用するパティション化されたテブルでは,外部キトされません。これは具体的には,次の2の記述がtrueであることを意味します。
ユザ定義パティショニングを使用する
InnoDB
テブルの定義には,外部キ参照を含めることはできません。定義に外部キ参照が含まれるInnoDB
テブルはパティション化できません。InnoDB
テブル定義に,ユ。ユザ定義パティショニングを持InnoDB
テブルに,外部キによって参照されるカラムを含めることはできません。
上記の制約のスコプには,InnoDB
ストレジエンジンを使用するすべてのテブルが含まれます。結果のテブルがこれらの制約に違反する创建表
およびALTER TABLE
ステトメントは許可されません。
ALTER TABLE……命令パティション化されたテブルにALTER TABLE……命令
ステトメントを実行すると,各パティション内でのみ行が並べ替えられます。列
主キを変更することによる代替ステトメントへの影響テブルの主キを変更することが望ましい場合があります(セクション19.6.1 "パティショニングキ,主キ,および一意キ"を参照してください)。取代
ステートメントを使用するアプリケーションでこれを行うと,これらのステートメントの結果が大きく変わることがあることを認識してください。詳細および例にいては,セクション13.2.8 " replace構文"を参照してください。
全文:ンデックスパティション化されたテブルは,InnoDB
またはMyISAM
ストレジエンジンを使用するパティション化されたテブルでも,全文
帐号ンデックスまたは検索をサポ帐号トしません。
空間カラム点
、几何
などの空間デタ型を持カラムは,パブルで使用できません。
一時テブル一時テブルはパティション化できません(Bug #17497)。
ログテブルログテブルをパティション化することはできません。そのようなテブルにALTER TABLE……分区的……
ステトメントを実行すると,エラで失敗します。
パティショニングキのデタ型パティショニングキは,整数カラム,または整数に解決される式である必要があります。枚举
カラムを使用する式は使用できません。カラムまたは式値は零
でもかまいません(セクション19.2.7 " MySQLパティショニングによるNULLの扱い"を参照してください)。
この制約には2の例外があります。
(线性)的关键
によってパティショニングするときは,文本
または团
以外の有効なMySQLデタ型のカラムをパティショニングキとして使用できます。MySQLの内部キハッシュ関数によって,これらの型から正しいデタ型が生成されるためです。たとえば,次の2の创建表
ステトメントは有効です。创建表tkc (c1 CHAR)分区CREATE TABLE tke (c1 ENUM('red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'))
范围列
または名单列
によってパティショニングするときは,文字列,日期
,およびDATETIME
カラムを使用できます。たとえば,次の各创建表
ステトメントは有効です。CREATE TABLE rc (c1 INT, c2 DATE) PARTITION BY RANGE COLUMNS(c2)(分区p0值小于('1990-01-01'),分区p1值小于('1995-01-01'),分区p2值小于('2000-01-01'),分区p3值小于('2005-01-01'),分区p4值小于(' MAXVALUE));创建表lc (INT c1, c2 CHAR(1)分区通过列表列(c2)(分区p0值(' a ', ' d ', ' g ', ' j ', ' m ', ' p ', ' s ', ' v ', ' y '),分区p1值(“b”、“e”、‘h’,‘k’,‘n’,‘问’,‘t’,‘w’,' z '),分区p2值(“c”,‘f’,‘我’,‘l’,‘o’,‘r’,‘你’,‘x’,NULL));
上記の例外は,团
または文本
カラム型には該当しません。
サブクエリパティショニングキはサブクエリにできません(そのサブクエリが整数値または)零
に解決される場合でも)。
サブパティションに関する問題サブパティションは哈希
または关键
パティショニングを使用する必要があります。サブパティション化できるのは范围
および列表
パティションのみです。哈希
および关键
パティションはサブパティション化できません。
現在のところ,SUBPARTITION的关键
にはサブパティショニングカラムを明示的に指定する必要がありますが,分区的关键
の場合は省略できます(その場合,テーブルの主キーカラムがデフォルトで使用されます),次のステートメントによって作成されたテーブルがあるとします。
CREATE TABLE ts (id INT NOT NULL AUTO_INCREMENT主键,名称VARCHAR(30))
次のようなステトメントを使用することで,关键
によってパティション化された,同じカラムを持ブルを作成できます。
CREATE TABLE ts (id INT NOT NULL AUTO_INCREMENT主键,名称VARCHAR(30))
前のステートメントは,次のように記述されているかのように扱われます(テーブルの主キーカラムがパーティショニングカラムとして使用されます)。
CREATE TABLE ts (id INT NOT NULL AUTO_INCREMENT主键,名称VARCHAR(30))
ただし,次のステートメントは,デフォルトカラムをサブパーティショニングカラムとして使用するサブパーティション化されたテーブルを作成しようとするため失敗します。このステトメントが成功するには次のようにカラムを指定する必要があります。
mysql> CREATE TABLE ts (-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name VARCHAR(30) -> PARTITION BY RANGE(id) -> SUBPARTITION BY KEY() -> SUBPARTITIONS 4 -> (-> PARTITION p0 VALUES LESS THAN (100), -> PARTITION p1 VALUES LESS THAN (MAXVALUE) ->);错误1064(42000):你有一个错误的SQL语法;MySQL > CREATE TABLE ts (-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, -> name VARCHAR(30) ->) -> PARTITION BY RANGE(id) -> SUBPARTITION BY KEY(id) -> SUBPARTITIONS 4 -> (-> PARTITION p0 VALUES LESS THAN (100), -> PARTITION p1 VALUES LESS THAN (MAXVALUE) ->);查询OK, 0行受影响(0.07秒)
これは既知の問題です(Bug #51470を参照してください)。
延迟オプションがサポトされない插入延迟
を使用してパティション化されたテブルに行を挿入することはサポトされません。これを試みるとエラで失敗します。
数据目录および索引目录オプション数据目录
および索引目录
は,パティション化されたテブルで使用するときに次の制限が適用されます。
テブルレベル
数据目录
および索引目录
オプションは無視されます(Bug #32091を参照してください)。Windowsでは,
数据目录
および索引目录
オプションは,MyISAM
テーブルの個々のパーティションまたはサブパーティションでサポートされません(错误# 30459)。ただし,InnoDB
テブルの個々のパティションまたはサブパティションには数据目录
を使用できます。
パティション化されたテブルを修復および再構築するステトメント检查表
、优化表
、分析表
,および修理表
がパティション化されたテブルでサポトされます。
また,ALTER TABLE……重建分区
を使用することで,パ1。ALTER TABLE……重组分区
でもパティションが再構築されます。これら2のステトメントの詳細にいては,セクション13.1.7 " alter table構文"を参照してください。
mysqlcheck、myisamchk,およびmyisampackはパティション化されたテブルでサポトされません。
导出オプション(同花顺表)刷新表
ステトメントの用于出口
オプションは,MySQL 5.6.16以前のパティション化されたInnoDB
テブルでサポトされません(Bug #16943907)。