縦型テーブル 垂直テーブル分割とは、多数の列を持つテーブルを複数のテーブルに分割することを意味します。たとえば、テーブル A には 20 個のフィールドが含まれており、テーブル A1 と A2 に分割され、各テーブルに 10 個のフィールドが含まれます (具体的な分割方法はビジネスによって異なります)。 利点: 同時実行性の高いシナリオでは、テーブル ロックと行ロックの数を減らすことができます。 デメリット: データ レコードが非常に大きい場合、読み取り速度と書き込み速度に依然としてボトルネックが発生します。 水平テーブル あるウェブサイトのデータベースに数億件のレコードを含むテーブルがある場合、SELECT でクエリを実行すると、インデックスがないとクエリが非常に遅くなります。この場合、ハッシュ アルゴリズムを使用してテーブルを 10 個のサブテーブルに分割できます (この時点で、各テーブルのデータ量は 1,000 万件のレコードのみです)。 同時に、各サブテーブルの情報を記録するための一般テーブルが生成されます。id=100 のレコードをクエリする場合、テーブル全体をスキャンする必要がなくなります。代わりに、一般テーブルを使用して、レコードが配置されている対応するサブテーブルを見つけ、対応するテーブルを検索します。これにより、IO 負荷が軽減されます。 デメリット: フロントエンド プログラム アプリケーションの SQL コードのメンテナンスに大きな問題が生じます。この場合、MySQL Merge ストレージ エンジンを使用してテーブル パーティションを実装できます。 ---------------------------------------私は私に痛みを感じさせる境界線です---------------------------------------------------- Merge ストレージ エンジンを使用してテーブルをパーティション分割することは、アプリケーションの SQL ステートメントに対して透過的であり、コードを変更する必要はありません。 CREATE TABLE t1 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY、メッセージ CHAR(20)); CREATE TABLE t2 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY、メッセージ CHAR(20)); INSERT INTO t1 (メッセージ) VALUES ('テスト'),('テーブル'),('t1'); INSERT INTO t2 (メッセージ) VALUES ('テスト'),('テーブル'),('t2'); CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY、メッセージ CHAR(20)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST; 合計表を作成するときに、エラーが発生する場合があります。 定義が異なる、または MyISAM 型ではない、または存在しない基礎テーブルを開くことができません 実際、マージ ストレージ エンジンは仮想テーブルであり、対応する実際のテーブルは MyISAM タイプのテーブルである必要があります。MySQL バージョンが 5.1 以上の場合、デフォルトのデータベースは InnoDB ストレージ エンジンを使用するため、合計を作成する場合、t1 テーブルと t2 テーブルは MyISAM ストレージ エンジンである必要があります。 サブテーブルを定期的に追加する必要がある場合は、マージ テーブルの結合を変更するだけで済みます。 CREATE TABLE t3( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY、メッセージ CHAR(20)); ALTER TABLE 合計 UNION=(t1,t2,t3) 水平分割 たとえば、データが 100 万個ある場合、それらは 10 個の部分に分割されます。最初の 10 万個のデータは最初のパーティションに配置され、次の 10 万個のデータは 2 番目のパーティションに配置されます。データが取得されると、テーブル構造内のすべてのフィールドが含まれ、水平分割によってテーブル構造は変更されません。 垂直分割 たとえば、ユーザー テーブルを設計するときに、最初はよく考えずに、すべての個人情報を 1 つのテーブルに入れることがあります。このテーブルには、個人プロファイルなどの比較的大きなフィールドが含まれます。ただし、これらのプロファイルは多くの人に閲覧されるわけではないため、誰かが閲覧したいときには検索することになります。テーブルを分割すると、このような大きなフィールドを分離できます。 完全なテーブルは、.MYD データ ファイル、.MYI インデックス ファイル、および .frm テーブル構造ファイルの 3 つのファイルに対応します。 以下もご興味があるかもしれません:
|
<<: ネイティブ js を使用してライブ バレット スクリーンのスクロール効果をシミュレートします。
>>: Win10 の Linux サブシステムを有効にする方法を説明します (詳細な画像とテキスト付き)
1. Python 3をインストールする1. 依存パッケージをインストールしますyum instal...
1. システムにログインし、ディレクトリに入ります: cd /etc/sysconfig/netwo...
遅いクエリをチェックすると、時間が正しくなく、システム時間とちょうど 8 時間異なっていることがわか...
目次序文1. 現在の時刻を取得する1.1 現在の日付と時刻を返す1.2 現在の日付を取得する1.3 ...
現象Apache Spark 2.x を使用すると、Spark ジョブがすべて完了しているにもかかわ...
コマンドラインでMYSQLに正常にログインでき、NavicatもMySQLに正常に接続できますが、I...
目次序文導入JavaScript 履歴 API独自のネイティブJSルーティングを実装するHistor...
1. CSSスタイルは、テキストが長すぎる場合に省略記号を表示する問題を解決します1. 一般的なスタ...
<br />これまで、Web ページのプリンタ対応バージョンを作成するには、印刷したとき...
目次序文キーの役割差分アルゴリズムにおけるキーの役割ヘッドノードを同期するテールノードを同期する新し...
序文デッドロックの本質はリソースの競合です。バッチ挿入の順序が一貫していないと、デッドロックに陥りや...
今日は、データ バックアップに関連するいくつかの点について調べ、MySQL データ バックアップに関...
この記事では、左ボタンと右ボタンをクリックすることで画像を切り替えるjQueryの具体的なコードを例...
目次DockerファイルドキュメントJenkins の設定Spring Boot プロジェクトでは、...
簡単に言えば、MySQL ワーム レプリケーションは、クエリされたデータを指定されたデータ テーブル...