联邦
ストレージエンジンを使用するときは,次の点に注意することをお勧めします。
联邦
テーブルをほかのスレーブに複製してもかまいませんが,スレーブサーバーが连接
文字列(またはmysql.servers
テーブルの行)で定義されたユーザーとパスワードの組み合わせを使用してリモートサーバーに接続できることを確認する必要があります。
次の項目は,联邦
ストレージエンジンがサポートしている機能とサポートしていない機能を示します。
リモートサーバーはMySQLサーバーでなくてはいけません。
联邦
テーブルがポイントするリモートテーブルは,联邦
テーブルを介してそのテーブルにアクセスを試みる前に,存在している必要があります。ある
联邦
テーブルがほかのテーブルをポイントすることは可能ですが,ループを作らないように注意する必要があります。联邦
テーブルは本質的にインデックスをサポートしていません。テーブルへのアクセスがリモートで処理されるため,リモートテーブルがインデックスをサポートします。同等のMyISAM
やほかのテーブルからのインデックス定義がサポートされていない可能性があるため,联邦
テーブルを作成するときは注意を払うようにしてください。たとえば,VARCHAR
、文本
,または团
カラムにインデックスプリフィクスを付けた联邦
テーブルを作成すると,失敗します。MyISAM
の次の定義は有効です。Create table ' t1 ' (' a ' varchar (100), unique key (' a ' (30)))
この例のキープリフィクスは
联邦
エンジンと互換性がないため,同等のステートメントは失敗します。Create table ' t1 ' (' a ' varchar (100), unique key (' a ' (30))) engine = federated connection =' mysql://127.0.0.1:3306/ test / t1 ';
可能であれば,これらのインデックスの問題を回避するため,リモートサーバーとローカルサーバーの両方にテーブルを作成する場合,カラムとインデックスの定義を分けるようにしてください。
内部的に,実装は
选择
、插入
、更新
,および删除
を使用しますが,处理程序
は使用しません。联邦
ストレージエンジンは,选择
、插入
、更新
、删除
、截断表
,およびインデックスをサポートしています。删除表
を除いて,ALTER TABLE
や,テーブルの構造に直接影響を与えるデータ定義言語ステートメントをサポートしていません。現在の実装は,プリペアドステートメントを使用しません。联邦
は插入……关于重复密钥更新
ステートメントを受け入れますが,重複キー違反が起こった場合,ステートメントはエラーで失敗します。大量の挿入を実行する場合(たとえば,
插入……选择……
ステートメント)の联邦
テーブルのパフォーマンスは,選択された各行が联邦
テーブルで個々の插入
ステートメントとして処理されるため,ほかのテーブルタイプに比べて低下します。トランザクションはサポートされていません。
联邦
は,複数の行がバッチでリモートテーブルに送られるように大量挿入処理を実行します。これでパフォーマンスは向上し,リモートテーブルは改善を実行できます。また,リモートテーブルがトランザクション対応の場合,エラーが発生したときにリモートストレージエンジンはステートメントロールバックを適切に実行できます。この機能には次の制限があります。挿入のサイズは,サーバー間の最大パケットサイズを超えることはできません。挿入がこのサイズを超えた場合,複数のパケットに分割され,ロールバック問題が発生する可能性があります。
大量挿入処理は
插入……关于重复密钥更新
では起こりません。
联邦
エンジンは,リモートテーブルが変わったかどうかを知る方法がありません。その理由は,このテーブルが,データベースシステム以外の何かによって決して書き込まれることのないデータファイルのように動作する必要があるためです。リモートデータベースに変更が加えられた場合に,ローカルテーブルのデータの完全性が損なわれる可能性があります。连接
文字列を使用する場合,パスワードに'@'文字を使用できません。创建服务器
ステートメントを使用してサーバー接続を作成することで,この制限を回避できます。insert_id
および时间戳
オプションはデータプロバイダには伝達されません。联邦
テーブルに対して発行された删除表
ステートメントは,ローカルテーブルだけを削除し,リモートテーブルは削除しません。联邦
テーブルはクエリーキャッシュでは機能しません。ユーザー定義のパーティション化は,
联邦
テーブルではサポートされていません。