テーブルエンジン
MySql データベースとは
一般的に言えば、データベースはデータの集合であり、特にコンピューターでは、データベースはメモリ上のファイルの集合、またはメモリデータの集合です。
通常、MySql データベース、SQL サーバー データベースなどと呼ばれるものは、実際にはデータを保存し、データベース内のデータをクエリおよび更新するための機能を提供するデータベース管理システムです。データベースがデータを格納する方法とデータを操作する方法の実装メカニズムに応じて、これらのデータベースには相違点と類似点があります。
MySql データベースはオープンソースのリレーショナル データベースです。現在提供できる機能には、SQL 言語、サブクエリ、ストアド プロシージャ、トリガー、ビュー、インデックス、トランザクション、ロック、外部キー制約、イメージ レプリケーションなどのサポートが含まれます。これらの機能については後ほど詳しく説明します。
Oracle や SQL Server などの大規模データベース システムと同様、MySql もクライアント/サーバー システムであり、単一プロセス マルチスレッド アーキテクチャのデータベースです。
MySql を他のデータベース システムと区別する重要な機能は、プラグイン ストレージ エンジンのサポートです。
では、ストレージ エンジンとは何ですか?
ストレージエンジンとは、簡単に言うと、データを保存する方法、保存されたデータにインデックスを付ける方法、データを更新したりクエリしたりする方法などのテクノロジーを実装したものです。リレーショナル データベースではデータがテーブルの形式で格納されるため、ストレージ エンジンはテーブル タイプ (つまり、このテーブルのストレージと操作のタイプ) と呼ばれることもあります。
Oracle や SQL Server などのデータベースにはストレージ エンジンが 1 つだけあり、すべてのデータ ストレージ管理メカニズムは同じです。 MySql データベースは、さまざまなストレージ エンジンを提供します。ユーザーは、さまざまなニーズに応じてデータ テーブル用にさまざまなストレージ エンジンを選択でき、また、独自のニーズに応じて独自のストレージ エンジンを作成することもできます。 MySQL にはどのようなストレージ エンジンがありますか?
1 MyISAM: このエンジンは、mysql によって提供される最初のエンジンです。この種類のエンジンは、静的 MyISAM、動的 MyISAM、圧縮 MyISAM の 3 つのタイプに分類できます。 静的 MyISAM: データ テーブル内の各データ列の長さが事前に固定されている場合、サーバーは自動的にこのテーブル タイプを選択します。データ テーブル内の各レコードは同じ領域を占有するため、テーブルのアクセスと更新の効率が非常に高くなります。データが破損した場合でも、回復が容易になります。
動的 MyISAM: varchar、xxxtext、または xxxBLOB フィールドがデータ テーブルに表示される場合、サーバーはこのテーブル タイプを自動的に選択します。静的 MyISAM と比較すると、この種のテーブルの記憶領域は比較的小さいですが、各レコードの長さが異なるため、データが複数回変更された後、データ テーブル内のデータがメモリに個別に格納される可能性があります。ひいては実行効率の低下につながります。同時に、メモリ内に大量の断片化が発生する可能性もあります。したがって、このタイプのテーブルは、多くの場合、optimize table コマンドまたは最適化ツールを使用して最適化する必要があります。
MyISAM の圧縮: 上記の両方のタイプのテーブルは、myisamchk ツールを使用して圧縮できます。このタイプのテーブルはストレージの占有領域をさらに削減しますが、このタイプのテーブルは圧縮後に変更できません。また、この種のテーブルは圧縮データであるため、読み込む際には解凍する必要があります。
ただし、MyISAM テーブルの種類に関係なく、現時点ではトランザクション、行レベルのロック、外部キー制約はサポートされていません。
2 MyISAM マージ エンジン: このタイプは、MyISAM タイプのバリアントです。テーブルの結合とは、複数の同一の MyISAM テーブルを 1 つの仮想テーブルに結合することです。ログやデータ ウェアハウスでよく使用されます。
3 InnoDB: InnoDB テーブル タイプは、MyISAM をさらに更新した製品と見なすことができ、トランザクション、行レベルのロック メカニズム、および外部キー制約の機能を提供します。
4 メモリ (ヒープ): このタイプのデータ テーブルはメモリ内にのみ存在します。ハッシュ インデックスを使用するため、データ アクセスは非常に高速です。この型はメモリ内に存在するため、一時テーブルでよく使用されます。
5 アーカイブ: このタイプは、select ステートメントと insert ステートメントのみをサポートし、インデックスはサポートしません。ロギングや集計分析でよく使用されます。
もちろん、MySql は上記よりも多くのテーブル タイプをサポートしています。
一般的に使用されるエンジンをいくつか紹介し、あまり使用されないエンジンについて学びます。今後、概念を理解していないエンジンが実際の作業で使用されることは避けてください。
最も一般的に使用される 2 つのストレージ エンジン:
· Myisam は Mysql のデフォルトのストレージ エンジンです。 create が新しいテーブルを作成し、新しいテーブルのストレージ エンジンが指定されていない場合、デフォルトで Myisam が使用されます。各 MyISAM はディスク上に 3 つのファイルとして保存されます。ファイル名はテーブル名と同じで、拡張子は .frm (ストレージ テーブル定義)、.MYD (MYData、ストレージ データ)、および .MYI (MYIndex、ストレージ インデックス) です。データ ファイルとインデックス ファイルを異なるディレクトリに配置すると、IO が均等に分散され、速度が向上します。
· ただし、Myisam のストレージ エンジンと比較すると、InnoDB の書き込み処理効率は低く、データとインデックスを保持するためにより多くのディスク領域を消費します。
適切なストレージ エンジンの選び方
選択基準: アプリケーションの特性に応じて適切なストレージ エンジンを選択し、複雑なアプリケーション システムの場合は、実際の状況に応じてさまざまなストレージ エンジンを選択できます。
一般的に使用されるストレージ エンジンに適用できる環境は次のとおりです:
1. MyISAM: デフォルトの MySQL プラグイン ストレージ エンジン。Web、データ ウェアハウジング、およびその他のアプリケーション環境で最も一般的に使用されるストレージ エンジンの 1 つです。 2. InnoDB : ACID トランザクション サポートを含む多数の機能を備えたトランザクション処理アプリケーションで使用されます。
3. メモリ: すべてのデータを RAM に保持し、参照やその他の同様のデータを迅速に検索する必要がある環境で非常に高速なアクセスを提供します。
4. マージ: MySQL DBA または開発者は、一連の同等の MyISAM テーブルを論理的に結合し、1 つのオブジェクトとして参照できます。データ ウェアハウジングなどの VLDB 環境に非常に適しています。
MyISAM
は、トランザクション、テーブル ロック (テーブル レベルのロック、ロックするとテーブル全体がロックされます) をサポートせず、全文インデックス作成をサポートし、動作速度が高速です。読書量が多いビジネスでよく使用されます。
1. myisam ストレージ エンジン テーブルは myd と myi で構成されます。 .myd はデータ ファイルの保存に使用され、.myi はインデックス ファイルの保存に使用されます。
2. myisam ストレージ エンジン テーブルの場合、mysql データベースはインデックス ファイルのみをキャッシュし、データ ファイルのキャッシュはオペレーティング システム自体によって完了します。
InnoDB
1. 主にオンライン トランザクション処理 (OLTP) アプリケーションのトランザクションをサポートします。
2. 行ロック設計は外部キーをサポートしています。つまり、読み取り操作はデフォルトではロックされません。
InnoDB は、大量のデータを処理する際に最大のパフォーマンスが得られるように設計されています。
注:
行ロック: 書き込みおよび更新操作中にこの行をロックして、他のユーザーが操作できないようにします。
テーブル ロック: 書き込みおよび更新操作中に、他の人がテーブルを操作できないようにテーブルをロックします。
トランザクション: データ操作の 1 つが失敗した場合に、複数のデータを同時に操作します。操作前にロールバックできます。銀行、電子商取引、金融、その他のシステムで一般的に使用されます。