インタビュアーがMysqlの4つの一般的なデータベースエンジンについて質問することを知っています。

序文

データベースストレージエンジンはデータベースの基盤となるソフトウェア組織であり、データベース管理システム(DBMS)はデータエンジンを使用してデータを作成、クエリ、更新、および削除します。さまざまなストレージエンジンは、さまざまなストレージメカニズム、インデックス作成手法、ロックレベル、およびその他の機能を提供します。さまざまなストレージエンジンを使用して、特定の機能を取得することもできます。現在、多くの異なるデータベース管理システムが、さまざまな異なるデータエンジンをサポートしています。MySQLのコアはストレージエンジンです。

ストレージエンジンビュー

MySQLは、ストレージエンジンにクエリを実行する機能を開発者に提供します。ここでは、MySQL5.1を使用しています。次を使用できます。

SHOW ENGINES

MySQLで使用されるエンジンを表示するコマンド。コマンドの出力は(私が使用するNavicat Premium)です。

ここに写真の説明を挿入

MySQLは、トランザクションセーフテーブルを処理するためのエンジンや非トランザクションセーフテーブル用のエンジンなど、非常に多くのストレージエンジンをユーザーに提供しているようです。

データベースがデフォルトで使用しているエンジンを確認したい場合は、次のコマンドを使用できます。

SHOW VARIABLES LIKE 'storage_engine';

確認するには、クエリ結果は次のとおりです。

ここに写真の説明を挿入

MySQLでは、サーバー全体で同じストレージエンジンを使用する必要はありません。特定の要件については、テーブルごとに異なるストレージエンジンを使用できます。Support列の値は、特定のエンジンを使用できるかどうかを示します。YESは使用できることを意味し、NOは使用できないことを意味し、DEFAULTはエンジンが現在のデフォルトのストレージエンジンであることを意味します。一般的に使用されるエンジンのいくつかを見てみましょう。

InnoDBストレージエンジン

InnoDBは、トランザクションデータベースに推奨されるエンジンであり、トランザクションセキュリティテーブル(ACID)、行ロック、および外部キーをサポートします。上の図からわかるように、InnoDBはデフォルトのMySQLエンジンです。InnoDBの主な機能は次のとおりです。

  • 1. InnoDBは、コミット、ロールバック、およびクラッシュリカバリ機能を備えたトランザクションセキュリティ(ACID互換)ストレージエンジンをMySQLに提供します。InnoDBは行レベルでロックされ、SELECTステートメントでOracleのような非ロック読み取りも提供します。これらの機能により、マルチユーザーの展開とパフォーマンスが向上します。SQLクエリでは、同じクエリであっても、InnoDBテーブルと他のMySQLテーブルタイプを自由に組み合わせることができます。

  • 2. InnoDBは、大量のデータを処理する際に最大のパフォーマンスを発揮するように設計されています。そのCPU効率は、他のディスクベースのリレーショナルデータベースエンジンロックとは比較にならない可能性があります

  • 3. InnoDBストレージエンジンはMySQLサーバーと完全に統合されています。InnoDBストレージエンジンは、メインメモリにデータとインデックスをキャッシュするための独自のバッファプールを維持します。InnoDBは、テーブルとインデックスを論理テーブルスペースに配置し、テーブルスペースには複数のファイル(またはrawディスクファイル)を含めることができます。これはMyISAMテーブルとは異なります。たとえば、MyISAMテーブルの各テーブルは個別のファイルに保存されます。InnoDBテーブルは、ファイルサイズが2GBに制限されているオペレーティングシステムでも、任意のサイズにすることができます

  • 4. InnoDBは、外部キーの整合性制約をサポートします。テーブルにデータを格納する場合、各テーブルのストレージはプライマリキーの順序で格納されます。テーブルの定義時にプライマリキーが指定されていない場合、InnoDBは各行に対して6バイトのROWIDを生成します。そしてそれを主キーとして使用します

  • 5. InnoDBは、高性能を必要とする多くの大規模なデータベースサイトで使用されています

InnoDBはディレクトリを作成しません。InnoDBを使用する場合、MySQLはMySQLデータディレクトリにibdata1という名前の10MBの自動拡張データファイルと、ib_logfile0およびib_logfile1という名前の2つの5MBログファイルを作成します。

MyISAMストレージエンジン

MyISAMはISAMストレージエンジンに基づいており、それを拡張します。これは、Web、データウェアハウジング、およびその他のアプリケーション環境で最も一般的に使用されているストレージエンジンの1つです。MyISAMは挿入速度とクエリ速度が高いですが、サポートされていません。MyISAMの主な機能は次のとおりです。

  • 1.大きなファイル(最大63ビットのファイル長)は、大きなファイルをサポートするファイルシステムおよびオペレーティングシステムでサポートされます

  • 2.削除、更新、挿入の操作が混在している場合、動的なサイズの行では断片化が少なくなります。これは、隣接する削除されたブロックをマージすることによって自動的に行われ、次のブロックが削除された場合は、次のブロックに展開されます

  • 3. MyISAMテーブルあたりのインデックスの最大数は64であり、再コンパイルすることで変更できます。インデックスあたりの最大列数は16です

  • 4.キーの最大長は1000バイトで、コンパイルして変更することもできます。キーの長さが250バイトを超える場合は、1024バイトを超えるキーが使用されます。

  • 5.BLOB列とTEXT列にインデックスを付けることができます

  • 6、NULLはインデックス列で許可されます。この値は各キーの0〜1バイトを占めます。

  • 7.すべての数値キー値は、より高いインデックス圧縮を可能にするために、最初に上位バイトに格納されます

  • 8.各MyISAMタイプのテーブルにはAUTO_INCREMENT内部列があり、これはINSERTおよびUPDATE操作中に更新され、AUTO_INCREMENT列は同時に更新されます。したがって、MyISAMタイプテーブルのAUTO_INCREMENT列の更新は、InnoDBタイプのAUTO_INCREMENTよりも高速です。

  • 9.データファイルとインデックスファイルを異なるディレクトリに配置できます

  • 10.各文字列は異なる文字セットを持つことができます

  • 11. VARCHARを含むテーブルは、固定または動的なレコード長を持つことができます

  • 12.VARCHAR列とCHAR列は最大64KBです。

MyISAMエンジンを使用してデータベースを作成すると、3つのファイルが生成されます。ファイル名はテーブル名で始まり、拡張子はファイルタイプです。frmファイルストレージテーブル定義、データファイルの拡張子は.MYD(MYData)、インデックスファイルの拡張子は.MYI(MYIndex)です。

MEMORYストレージエンジン

MEMORYストレージエンジンは、データをメモリ内のテーブルに格納し、他のテーブルデータを照会および参照することなく高速アクセスを提供します。MEMORYの主な機能は次のとおりです。

  • 1. MEMORYテーブルの各テーブルには、最大32のインデックスを含めることができ、各インデックスには16の列があり、最大キー長は500バイトです。

  • 2. MEMORYストレージエンジンは、HASHとBTREEのエピトームを実行します

  • 3.MEMORYテーブルに一意でないキー値が存在する可能性があります

  • 4.MEMORYテーブルは固定レコード長フォーマットを使用します

  • 5.MEMORYはBLOBまたはTEXT列をサポートしていません

  • 6. MEMORYは、AUTO_INCREMENT列と、NULL値を含む可能性のある列のインデックスをサポートします

  • 7. MEMORYテーブルは、すべてのクライアント間で共有されます(他の非TEMPORARYテーブルと同様)。

  • 8. MEMORYテーブルのメモリはメモリに格納されます。メモリは、MEMORYテーブルと、クエリ処理中にサーバーがアイドル状態のときに作成された内部テーブルとの間で共有されます。

  • 9. MEMORYテーブルの内容が不要になった場合、MEMORYテーブルが使用していたメモリを解放するには、DELETEFROMまたはTRUNCATETABLEを実行するか、テーブル全体を削除する必要があります(DROP TABLEを使用)。

ARCHIVEストレージエンジン

アーカイブとはアーカイブを意味します。アーカイブ後、多くの高度な機能はサポートされなくなり、最も基本的な挿入機能とクエリ機能のみがサポートされます。MySQL 5.5より前は、Archiveはインデックスをサポートしていませんでしたが、MySQL5.5以降でインデックスのサポートを開始しました。アーカイブには優れた圧縮メカニズムがあり、zlib圧縮ライブラリを使用し、レコードが要求されたときにリアルタイムで圧縮するため、ウェアハウスとしてよく使用されます。

シナリオ:高圧縮と高速挿入の特性により、アーカイブはログテーブルのストレージエンジンとして非常に適していますが、テーブルが頻繁に照会されないことが前提です。

ストレージエンジンの選択

次の表に示すように、さまざまなストレージエンジンには、さまざまなニーズを満たすための独自の特性があります。

ここに写真の説明を挿入

送信、ロールバック、クラッシュリカバリ機能などのトランザクションセキュリティ(ACID互換)機能を提供し、同時実行制御が必要な場合は、InnoDBが適しています。

データテーブルが主にレコードの挿入とクエリに使用される場合、MyISAMエンジンはより高い処理効率を提供できます

データが一時的にのみ保存され、データ量が多くなく、高度なデータセキュリティが必要ない場合は、データをメモリに保存するメモリエンジンを選択できます。MySQLは、このエンジンを一時テーブルとして使用して、クエリの中間結果を保存します。

INSERT操作とSELECT操作しかない場合は、アーカイブを選択できます。アーカイブは、同時実行性の高い挿入操作をサポートしていますが、トランザクションセーフではありません。アーカイブは、ログ情報がアーカイブを使用できるなど、アーカイブされたデータの保存に非常に適しています

使用するエンジンには柔軟な選択が必要です。データベース内の複数のテーブルで異なるエンジンを使用して、さまざまなパフォーマンスと実際のニーズを満たすことができます。適切なストレージエンジンを使用すると、データベース全体のパフォーマンスが向上します。

注意してください、迷子にならないでください

さて、みなさん、上記はこの記事の全内容です。ここで見ることができるのはすべて才能です。さっきも言ったように、PHPには技術的なポイントがたくさんあります。多すぎるので、書くのは本当に不可能で、書いた後はあまり読まないので、必要に応じてここでPDFとドキュメントに整理します。できる

クリックしてシークレットコードを入力してください:PHP +「プラットフォーム」

ここに写真の説明を挿入

ここに写真の説明を挿入


学習内容の詳細については、[Comparative Standard Factory]の優れたPHPアーキテクトチュートリアルカタログをご覧ください。給与が確実に上がるように読むことができます(継続的な更新)

上記のコンテンツは、すべての人に役立つことを願っています。多くのPHP担当者は、上級者になると常に問題やボトルネックに直面します。ビジネスコードを書きすぎると、方向性がわかりません。どこから改善を始めればよいかわかりません。これに関する情報をまとめました。ただし、これらに限定されません。分散アーキテクチャ、高スケーラビリティ、高パフォーマンス、高同時実行性、サーバーパフォーマンスチューニング、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql最適化、シェルスクリプト、Docker、マイクロサービス、Nginxなど。多くの知識ポイント、高度な高度な乾物は、誰とでも無料で共有でき、必要な人は私のPHPテクノロジー交換グループに参加できます

おすすめ

転載: blog.csdn.net/weixin_49163826/article/details/108811416