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 ステートメント」を参照してください。