10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb


MySQL 5.6リファレンスマニュアル/パティション化/パティショニングの制約と制限

19.6パティショニングの制約と制限

このセクションでは,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モードを変更したことによる,パーティション化されたテーブルの動作の変化をいくつか示しています。

  1. エラ処理次のように,パティショニング式がDIV 0国防部0などのいずれかであるパティション化されたテブルを作成するとします。

    CREATE 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
  2. テブルアクセス可能性サーバー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であることを意味します。

  1. ユザ定義パティショニングを使用するInnoDBテブルの定義には,外部キ参照を含めることはできません。定義に外部キ参照が含まれるInnoDBテブルはパティション化できません。

  2. 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の例外があります。

  1. (线性)的关键によってパティショニングするときは,文本または以外の有効なMySQLデタ型のカラムをパティショニングキとして使用できます。MySQLの内部キハッシュ関数によって,これらの型から正しいデタ型が生成されるためです。たとえば,次の2の创建表ステトメントは有効です。

    创建表tkc (c1 CHAR)分区CREATE TABLE tke (c1 ENUM('red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'))
  2. 范围列または名单列によってパティショニングするときは,文字列,日期,および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構文"を参照してください。

mysqlcheckmyisamchk,およびmyisampackはパティション化されたテブルでサポトされません。

导出オプション(同花顺表)刷新表ステトメントの用于出口オプションは,MySQL 5.6.16以前のパティション化されたInnoDBテブルでサポトされません(Bug #16943907)。


本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb