大量のデータベース データを最適化することは非常に高度な科学であり、開発者が習得する必要がある専門的なスキルでもあります。 MySQL のテーブル パーティショニングは、垂直パーティショニングと水平パーティショニングに分けられます。どちらのパーティショニング形式も比較的簡単です。簡単に言えば、垂直パーティショニングとは、テーブル内のレコード数は多くないが、フィールドが非常に長く、テーブルが大きなスペースを占め、テーブルを取得するときに大量の IO を実行する必要があり、パフォーマンスが大幅に低下することを意味します。このとき、大きなフィールドを別のテーブルに分割する必要があり、このテーブルは元のテーブルと 1 対 1 の関係を持ちます。水平テーブル パーティショニングとは、同じデータベース内で特定のルールに従って、同じテーブルのデータを複数のテーブルに分割することです。その目的は、1 つのテーブルに大量のデータが存在することによるパフォーマンスの問題を最適化し、IO 競合を回避し、テーブルがロックされる可能性を減らすことです。 テーブル シャーディングを実装するのは簡単ですが、複雑なのはシャーディング後にデータをどのようにクエリするかということです。今日の実装では、MysqlテーブルエンジンMRG_MyISAM(MERGE)を使用します。 MERGE テーブルを作成すると、MySQL はディスク上に 2 つのファイルを作成します。ファイル名はテーブル名で始まり、ファイルの種類を示す拡張子が付きます。 .frm ファイルにはテーブル定義が保存され、.MRG ファイルには使用するテーブルの名前が含まれます。これらのテーブルは、MERGE テーブル自体と同じデータベースに存在する必要はありません。 テーブルのコレクションに対して SELECT、DELETE、UPDATE、および INSERT を使用できます。 MERGE テーブルにマップするテーブルに対して、SELECT、UPDATE、および DELETE 権限が必要です。 MERGE テーブルを DROP すると、MERGE 仕様のみが削除されます。基になるテーブルは影響を受けません。 MERGE テーブルを作成するときは、UNION=(list-of-tables) 句を指定して、1 つのテーブルとして使用するテーブルを指定する必要があります。 MERGE テーブルへの挿入を UNION リストの最初のテーブルまたは最後のテーブルで実行する場合は、必要に応じて INSERT_METHOD オプションを指定できます。挿入をそれぞれ最初のテーブルまたは最後のテーブルに実行するには、FIRST または LAST 値を使用します。 INSERT_METHOD オプションを指定しない場合、またはこのオプションを NO の値で指定した場合。 MERGE テーブルにレコードを挿入しようとするとエラーが発生します。 例えば: テーブル `yzm_table1` を作成します ( `id` int(10) 符号なし NOT NULL, `title` varchar(100) NOT NULL デフォルト '' `content` varchar(255) NOT NULL DEFAULT '' 主キー (`id`) )ENGINE=MyISAM デフォルト文字セット=utf8; テーブル `yzm_table2` を作成します ( `id` int(10) 符号なし NOT NULL, `title` varchar(100) NOT NULL デフォルト '' `content` varchar(255) NOT NULL DEFAULT '' 主キー (`id`) )ENGINE=MyISAM デフォルト文字セット=utf8; テーブルが作成されました。ここでの ID は自動増分に設定できないことに注意してください。また、構造、タイプ、長さ、フィールドの順序など、すべてのテーブル構造が一貫している必要があります。では、この ID はどうやって取得するのでしょうか。これについては後で詳しく説明します。ここで、クエリを実行するために結合されたテーブルが必要です。結合されたテーブルを作成するコードは次のとおりです。 テーブル `yzm_table` を作成します ( `id` int(10) 符号なし NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL デフォルト '' `content` varchar(255) NOT NULL DEFAULT '' 主キー (`id`) ) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=NO INSERT_METHOD=LAST UNION=(`yzm_table1`,`yzm_table2`); マージされたテーブルは、前のテーブルと同じ構造、タイプ、長さ、フィールドの順序を持つ必要があります。ここで INSERT_METHOD=NO は、このテーブルでは挿入操作が許可されないことを意味します。クエリを実行する必要がある場合、yzm_table テーブルに対してのみ操作できます。つまり、このテーブルでは選択操作のみを実行できます。 データテストを挿入します: `yzm_table1` に値 ('1'、'table1-1'、'content1-1') を挿入します。 `yzm_table1` に値 ('2'、'table1-2'、'content1-2') を挿入します。 `yzm_table2` に値 ('3'、'table2-1'、'content2-1') を挿入します。 `yzm_table2` に値 ('4'、'table2-2'、'content2-2') を挿入します。 `yzm_table2` に値 ('5'、'table2-3'、'content2-3') を挿入します。 次に、マージされたテーブル(メインテーブル)をクエリします。 `yzm_table` から * を選択し、制限を 10 にします。 確かに、関連するすべてのサブテーブルのすべてのデータをクエリできるため、ページング、統計などによってすべてのデータをクエリできます。 上記は、MRG_MyISAM (MERGE) を使用して MySQL でシャーディング後のクエリを実装する例の詳細です。MySQL でのシャーディング後のクエリの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: HTML ウェブページ作成のための 8 つの強力なテクニック
>>: Docker コンテナで DockerFile を使用して複数の Tomcat サービスをデプロイする手順
導入MySQL はレプリケーションを通じてストレージ システムの高可用性を実現します。現在、MySQ...
導入私はしばらくの間、postgresql データベースを使用していました。クラウドに移行した後、自...
1. Docker Compose の使用方法は docker コマンドの使用方法と非常に似ています...
もう2020年です。飢えた人間は単純なテキストでは満足できなくなり、さまざまなスタイルの派手なテキス...
ネガティブな距離は共感を意味します。序文(疑問の提起):プロダクトマネージャーは機能を把握します。機...
Dockerインストール後のネットワークタイプ [root@insure updev]# docke...
IE6 で試してみたところ、ツールバーが表示されました。オプションに「イメージ ツールバーを有効にす...
私はかつて、ウェブサイトを一度も構築したことのない人々が、初心者向けのウェブサイト構築方法に関する私...
オペレーティングシステム: Alibaba Cloud ESC インスタンス centos7.4ソフ...
CSS プロパティのブラウザ互換性をまとめる必要があるのはなぜですか?使用する際は、Can I U...
この記事では、古典的なスネークゲームを実装するためのJavaScriptの具体的なコードを参考までに...
MySQL のフィルタリングのタイミングは、集計関数で使用される where 条件と having ...
Web 上でフォントを使用することは、基本的なスキルであると同時に芸術でもあります。英語のフォントに...
フォーラムでは、ネットユーザーから「HTML ファイル内の別の HTML ファイルの内容を読み取るこ...
すべてには基礎が必要です。家を建てるには基礎が必要です。方程式を解くには、まず九九を覚える必要があり...