このページは機械翻訳したものです。
MERGE テーブルは、次のような問題を解決するのに役立つことがあります。
ログテーブルセットを簡単に管理する。 たとえば、異なる月のデータを別々のテーブルに入力し、myisampack を利用してそれらの一部を圧縮してから、1 つのものとして利用するために
MERGEテーブルを作成できます。スピードを上げる。 大きな読み取り専用テーブルを同じ基準で分割し、個々のテーブルを異なるディスクに置くことができます。 このように構成された
MERGEテーブルは、1 つの大きなテーブルを使用するよりも、速度がかなり速くなる可能性があります。より効率的に検索を行う。 検索する対象が正確にわかっている場合、あるクエリーで基礎テーブルの 1つだけを検索し、別のクエリーで
MERGEテーブルを使用できます。 重複するテーブルセットを使用する、多数の異なるMERGEテーブルを持つこともできます。より効率的な修復を行う。 1 つの大きなテーブルを修復するよりも、
MERGEテーブルにマッピングされた個々の小さいテーブルを修復する方が簡単です。多くのテーブルを瞬時に 1 つのテーブルとしてマッピングする。
MERGEテーブルは個々のテーブルのインデックスを利用するので、それ自体のインデックスを保守する必要はありません。 その結果、MERGEテーブルコレクションは、作成や再マッピングを非常に速く行うことができます。 (MERGEテーブルを作成するときは、インデックスが作成されない場合でも、インデックスの定義を指定する必要があります。)テーブルセットがあり、それらからオンデマンドで大きなテーブルを作成する場合は、代わりにそれらからオンデマンドで
MERGEテーブルを作成できます。 この方が、速度がかなり速くなり、多くのディスク容量が節約されます。オペレーティングシステムのファイルサイズ制限を超える。 個々の
MyISAMテーブルはこの制限に制約されますが、MyISAMテーブルのコレクションは制約されません。MyISAMテーブルにマッピングするMERGEテーブルを定義することで、その単一テーブルのエイリアスやシノニムを作成できます。 これを行なっても、特に顕著なパフォーマンス面の影響はないはずです (個々の読み取りのためにいくつかの間接呼び出しやmemcpy()呼び出しがあるだけです)。
MERGE テーブルの短所は次のとおりです。
MERGEテーブルに対して、同一のMyISAMテーブルしか使用できません。MyISAM機能のいくつかはMERGEテーブルでは使用できません。 たとえば、MERGEテーブルにFULLTEXTインデックスを作成できません。 (基礎MyISAMテーブルにFULLTEXTインデックスを作成できますが、MERGEテーブルを全文検索で検索できません。)MERGEテーブルが非一時的である場合、すべての基礎MyISAMテーブルは非一時的である必要があります。MERGEテーブルが一時的である場合、MyISAMテーブルは一時的なテーブルと非一時的なテーブルが混在してもかまいません。MERGEテーブルはMyISAMテーブルより多くのファイルディスクリプタを使用します。 10 個のクライアントが、10 個のテーブルにマッピングするMERGEテーブルを使用する場合、サーバーは (10 × 10) + 10 個のファイルディスクリプタを使用します。(10 個のクライアントに対してそれぞれ 10 個のデータファイルディスクリプタに加えて、クライアント間で共有される 10 個のインデックスファイルディスクリプタです。)インデックスの読み取りは低下します。 インデックスを読み取るときに、
MERGEストレージエンジンはすべての基礎テーブルに読み取りを発行して、渡されたインデックス値に厳密に一致するかをチェックする必要があります。 次のインデックス値を読み取るために、MERGEストレージエンジンは読み取りバッファーを検索して次の値を探す必要があります。 1 つのインデックスバッファーが使い果たされていた場合にのみ、ストレージエンジンは次のインデックスブロックを読み取る必要があります。 これで、MERGEインデックスはeq_ref検索をかなり遅くしますが、ref検索ではそれほど低下しません。eq_refおよびrefの詳細情報については、セクション13.8.2「EXPLAIN ステートメント」を参照してください。