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