MySQL 8.0 リファレンスマニュアル


16.7.1 MERGE テーブルの長所と短所

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


関連キーワード:  テーブル, MERGE, ストレージ, エンジン, インデックス, 作成, FEDERATED, 検索, 読み取り, 個々