MySql 最適化アーキテクチャとストレージ エンジン (概要共有)
この記事では、mysql アーキテクチャとストレージ エンジンの概要に関する関連知識を提供します。お役に立てば幸いです。
1. MySQL 構造システム
一般的に言えば、MySQL は次のようになります。ストレージ エンジン層は 3 つの層に分かれており、階層化をより詳細に行う場合は、ストレージ エンジン層をさらにエンジン層とストレージ層に分けることができます。一部のクライアントとリンク サービスです。これには、ローカル ソック通信や、クライアント/サーバー ツールによって実装されるほとんどの TCP/IP に似た通信が含まれます。主に、いくつかの接続処理、認可認証、および関連するセキュリティ ソリューションを完了します。スレッド プールの概念がこの層に導入され、認証を通じて安全にアクセスするクライアントにスレッドを提供します。 SSL ベースの安全なリンクもこの層に実装できます。また、サーバーは、安全にアクセスする各クライアントに対してサーバーが持つ操作権限を検証します。
サービス層
第 2 層のアーキテクチャは主に、SQL インターフェイスなどのコア サービス機能のほとんどを完了し、キャッシュされたクエリ、SQL 分析と最適化、および一部の組み込み機能を完了します。関数を実装します。プロシージャ、関数など、すべてのクロスストレージ エンジン機能もこの層に実装されます。この層では、サーバーはクエリを解析して対応する内部解析ツリーを作成し、テーブル クエリの順序の決定、インデックスを使用するかどうかなどの対応する最適化を完了し、最終的に対応する実行操作を生成します。 select ステートメントの場合、サーバーは内部キャッシュにもクエリを実行します。キャッシュ領域が十分に大きければ、大量の読み取り操作を解決する環境でシステムのパフォーマンスを大幅に向上させることができます。
エンジン層
ストレージ エンジン層、ストレージ エンジンは、MySQL でのデータの保存と取得を実際に担当し、サーバーは API を通じてストレージ エンジンと通信します。ストレージエンジンが異なれば機能も異なるため、ニーズに応じて適切なストレージエンジンを選択できます。
ストレージ層
データ ストレージ層は主にファイル システムにデータを保存し、ストレージ エンジンとの対話を完了します。他のデータベースと比較すると、MySQL は少し異なり、そのアーキテクチャはさまざまなシナリオに適用でき、適切に動作します。主にストレージ エンジンに反映されるプラグイン ストレージ エンジン アーキテクチャは、クエリ処理を他のシステム タスクやデータの保存と抽出から分離します。このアーキテクチャにより、ビジネス ニーズと実際のニーズに基づいて適切なストレージ エンジンを選択できます。
2. MySQL サーバーのコンポーネント
接続層コンポーネント
MySQL によって提供されるインタラクティブ コンポーネント (java、.net、など) PHP およびその他の言語は、このコンポーネントを使用して SQL ステートメントを操作し、SQL との対話を実現できますコネクタ: インタラクティブ インターフェイス
サービス層コンポーネント
接続プール: 接続プール コンポーネント
ユーザー接続、スレッド処理、およびキャッシュを必要とするその他の要件の管理とバッファーに使用されます
管理サービスとユーティリティ: 管理サービスとツール コンポーネント
バックアップとリカバリ、Mysql レプリケーション、クラスタリング、セキュリティ管理などのシステム管理および制御ツールに使用されます。
SQL インターフェイス: SQL インターフェイス コンポーネント
受け入れるために使用されます。 DML、DDL、ストアド プロシージャなどのユーザー SQL コマンドを実行し、最終結果をユーザーに返します。
パーサー: クエリ アナライザー コンポーネント
SQL コマンドが渡されるときパーサーにとって、それは検証と分析であり、まず SQL コマンド構文の正当性を分析し、SQL コマンドをデータ構造に分解しようとします。分解が失敗した場合は、SQL ステートメントが不当であることを示すプロンプトが表示されます
オプティマイザー: オプティマイザー コンポーネント
SQL ステートメントはクエリ オプティマイザーを使用して、クエリを実行する前にクエリを最適化します。
この選択クエリでは、最初にすべてのテーブルをクエリしてから年齢でフィルタリングするのではなく、まず where ステートメントに基づいて選択します
この選択クエリでは、すべての属性を取り出してからフィルター処理するのではなく、最初に ID と名前に基づいて属性投影を実行します。
- これら 2 つのクエリ条件を接続して最終的なクエリ結果を生成します
- キャッシュとバッファ: バッファ プール コンポーネント
- クエリ キャッシュにヒットしたクエリ結果がある場合、クエリ ステートメントはクエリ キャッシュからデータを直接フェッチできます。このキャッシュ メカニズムは、一連の小さなキャッシュで構成されます。たとえば、テーブル キャッシュ、レコード キャッシュ、キー キャッシュ、権限キャッシュなどです。
エンジン レイヤー コンポーネント
プラガブル ストレージ エンジン: ストレージ エンジン
ストレージ エンジンは、データの保存、インデックスの確立、クエリ データの更新などのテクノロジの実装です。ストレージ エンジンはライブラリ ベースではなくテーブル ベースです。したがって、ストレージ エンジンはテーブル タイプとも呼ばれます。テーブルの作成、データ ストレージ、取得、更新などはすべて MySQL ストレージ エンジンによって完了します。これは、MySQL ストレージ エンジンが MySQL で果たす重要な役割でもあります。
MYSQL はプラグイン ストレージ エンジン アーキテクチャを提供するため、ユーザーはさまざまなニーズに応じてデータ テーブルにさまざまなストレージ エンジンを選択できます。また、ユーザーは独自のストレージ エンジンを作成したり、ニーズに応じてストレージ エンジンを作成したりすることもできます。異なるストレージ エンジンを使用するライブラリ内の異なるテーブルも許可されます。
ストレージ層コンポーネント
ファイル システム: ファイル システム
は、実際に MySQL を保存するために使用されます。データベース ファイルや一部のログ ファイルなど。一般的なものには Linux、Windows などが含まれます。
3. ストレージ エンジン
一般的に使用されるストレージ エンジンの違い
MySQL バージョン 5.5 より前のバージョンでは、デフォルトのストレージ エンジンは MySQL に付属する MyISAM でした。バージョン 5.5 以降、デフォルトのストレージ エンジンは、MySQL 用にサードパーティ企業によって開発された InnoDB に変更されました。なぜ変更するのでしょうか?
主な理由は、InnoDB がトランザクションと行レベルのロックをサポートしており、ビジネスの一貫性要件が高いシナリオにより適しているためです。
さまざまなストレージ エンジンのテーブル作成ステートメント:
CREATE TABLE `user_innodb` ( `id` int(11) PRIMARY KEY AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `gender` tinyint(1) DEFAULT NULL, `phone` varchar(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `user_myisam` ( `id` int(11) PRIMARY KEY AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `gender` tinyint(1) DEFAULT NULL, `phone` varchar(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4; CREATE TABLE `user_memory` ( `id` int(11) PRIMARY KEY AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `gender` tinyint(1) DEFAULT NULL, `phone` varchar(11) DEFAULT NULL ) ENGINE=MEMORY DEFAULT CHARSET=utf8mb4; CREATE TABLE `user_archive` ( `id` int(11) PRIMARY KEY AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `gender` tinyint(1) DEFAULT NULL, `phone` varchar(11) DEFAULT NULL ) ENGINE=Archive DEFAULT CHARSET=utf8mb4; CREATE TABLE `user_csv` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL, `gender` tinyint(1) NOT NULL, `phone` varchar(11) NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8mb4;
InnoDB
InnoDB ストレージ エンジンは、現在の MySQL のデフォルトのストレージ エンジンです。 InnoDB ストレージ エンジンは、コミット、ロールバック、およびクラッシュ回復機能を備えたトランザクション セキュリティを提供します。ただし、MyISAM のストレージ エンジンと比較すると、InnoDB の書き込み処理効率は低く、データとインデックスを保持するためにより多くのディスク領域を消費します。
InnoDB ストレージ エンジンの特性は他のストレージ エンジンとは異なります:
- トランザクション制御
- 外部キー制約
InnoDBストレージ テーブルとインデックス付けには 2 つの方法があります:
- 共有テーブル スペース ストレージを使用します。この方法で作成されたテーブルのテーブル構造は .frm ファイルに保存されます。データとインデックスは次の場所に保存されます。 innodb_data_home_dir および innodb_data_file_path. によって定義されたテーブルスペース (複数のファイルにすることができます)。
- マルチテーブルスペースストレージを使用する: この方法で作成されたテーブルのテーブル構造は .frm ファイルにまだ存在しますが、各テーブルのデータとインデックスは .ibd に個別に保存されます。
InnoDB 適切な使用環境:
InnoDB は MySQL のデフォルトのストレージ エンジンであり、トランザクション処理アプリケーションに使用され、外部キーをサポートします。アプリケーションのトランザクション整合性に対する要件が比較的高く、同時実行条件下でのデータの一貫性が必要であり、データ操作に挿入やクエリに加えて多くの更新操作や削除操作が含まれる場合は、InnoDB ストレージ エンジンがより適切な選択肢です。
InnoDB ストレージ エンジンは、削除や更新によって発生するロックを効果的に削減することに加えて、トランザクションの完全な送信とロールバックを保証することもできるため、比較的高いデータ精度を必要とする請求システムや金融システムなどのシステムに適しています。 . システムでは、InnoDB が最適な選択です。
MyISAM
MyISAM は、トランザクションや外部キーをサポートしていません。その利点は、高速アクセスと、トランザクションの整合性または主に SELECT と INSERT の要件がないことです。基本的に、どのアプリケーションでもこのエンジンを使用して、テーブルを作成します。
には次の 2 つの重要な機能があります。
- トランザクションをサポートしません
- ファイル保管方法
各 MyISAM はディスク上にあります。ファイル名はテーブル名と同じですが、拡張子は
- .frm (格納テーブル定義);
- .MYD(MYData, Store data);
- .MYI(MYIndex, storageindex);
MyISAM の適切な利用環境:
読み取り操作と挿入操作が主なアプリケーションの場合、更新操作と削除操作はほとんどなく、トランザクションの整合性と同時実行性の要件はそれほど高くないため、このストレージ エンジンの選択は非常に適しています。
MEMORY
メモリ ストレージ エンジンは、テーブル データをメモリに保存します。各 MEMORY テーブルは、実際には .frm 形式のディスク ファイルに対応します。このファイルにはテーブルの構造のみが保存され、そのデータ ファイルはメモリに保存されます。これにより、データ処理が高速になり、テーブル全体の効率が向上します。 。
MEMORY タイプのテーブルは、データがメモリに保存され、デフォルトで HASH インデックスが使用されるため、アクセスが非常に高速ですが、サービスがシャットダウンされると、テーブル内のデータは失われます。
MEMORY 適切な使用環境:
すべてのデータを RAM に保存します。これにより、高速な位置記録やその他の同様のデータ環境が必要な場合に、いくつかのアクセス ブロックを提供できます。
MEMORY の欠点は、テーブルのサイズに制限があることです。大きすぎるテーブルはメモリにキャッシュできません。次に、テーブル内のデータを復元できることを確認する必要があります。 . テーブル内のデータは、データベースが異常終了した後に復元できます。 MEMORY テーブルは通常、アクセス結果を迅速に取得するために更新頻度が低い小さなテーブルに使用されます。
MERGE
MERGE ストレージ エンジンは、一連の MyISAM テーブルの組み合わせです。これらの MyISAM テーブルは同じ構造を持つ必要があります。MERGE テーブル自体にはデータは格納されません。MERGE タイプのテーブルは次のとおりです。クエリと更新、削除操作、これらの操作は実際には内部 MyISAM テーブルに対して実行されます。
MERGE タイプのテーブルの挿入操作の場合、挿入されたテーブルは INSERT_METHOD 句によって定義され、3 つの異なる値を持つことができます。FIRST または LAST の値を使用すると、挿入操作は最初の値または LAST 値に適用されます。テーブル上で、この句が定義されていないか、NO として定義されている場合、この MERGE テーブルに対して挿入操作を実行できないことを意味します。
MERGE テーブルに対して DROP 操作を実行できますが、この操作は MERGE テーブルの定義を削除するだけであり、内部テーブルには影響しません。
MERGE 適切な使用環境:
一連の等価な MyISAM テーブルを論理的に結合し、オブジェクトとして参照するために使用されます。
MERGE テーブルの利点は、単一の MyISAM テーブルのサイズ制限を突破できることです。また、異なるテーブルを複数のディスクに分散することで、MERGE テーブルのアクセス効率を効果的に向上させることができます。これは、データ ウェアハウジングなどの VLDB 環境に非常に適しています。
推奨学習: mysql ビデオ チュートリアル
以上がMySql 最適化アーキテクチャとストレージ エンジン (概要共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

Oracle データベースと MySQL はどちらもリレーショナル モデルに基づいたデータベースですが、Oracle は互換性、スケーラビリティ、データ型、セキュリティの点で優れており、MySQL は速度と柔軟性に重点を置いており、小規模から中規模のデータ セットに適しています。 ① Oracle は幅広いデータ型を提供し、② 高度なセキュリティ機能を提供し、③ エンタープライズレベルのアプリケーションに適しています。① MySQL は NoSQL データ型をサポートし、② セキュリティ対策が少なく、③ 小規模から中規模のアプリケーションに適しています。
