MySQLの実行原理、論理階層化、データベース処理エンジンの変更について詳しく説明します

MySQLの実行原理、論理階層化、データベース処理エンジンの変更について詳しく説明します

長い間 MySQL を使ってきたので、SQL 文はすでに覚えていると思います。そこで、その実行原理を理解しようとしました。以下は、学習過程でまとめた重要なポイントです。

B/S アーキテクチャである限り、クライアントとサーバーが存在し、MySQL も例外ではありません。

まず、クライアントはリクエストを送信します。これはクエリ リクエスト (Select) であり、リクエストの対象はサーバーです。サーバーはこのクエリ機能をどのように処理するのでしょうか。

論理階層化

まず、サーバーは 4 層構造の大きなコンテナであると想像できます。リクエストが届くと、これらの 4 層が実行され、1 回の実行後にのみ目的の結果が返されます。

第1層: 接続層

つまり、クライアントが Select を送信すると、処理のために接続層に直接渡され、その役割はクライアントに接続するためのサービスを提供することです。

接続層はクライアントとの接続を確立し、リクエスト (Select) を取得するだけですが、接続を行うだけなので、それ自体は処理しません。では、誰がそれを処理するのでしょうか?そのまま歩き続けます。

第2層: サービス層

サービス層は次の 2 つのことを行うことができます。

1. ユーザーにさまざまなインターフェースを提供する

たとえば、先ほどのクエリでは、一般的な CRUD (作成、削除、変更、クエリ) 操作がすべてここにあります。接続層はこの Select を取得し、それをサービス層に直接渡します。ユーザーにインターフェイスを提供するだけでなく、SQL オプティマイザーと呼ばれるものも提供します。

2. MySQL オプティマイザー

実行する SQL 文を記述すると、ここで実行した後 (第 2 層)、オプティマイザは記述した SQL 文のパフォーマンスが十分ではないと判断します。このとき、オプティマイザは実行後に記述したものと同等の SQL 文を記述して置き換えます。この同等の記述方法は、記述した SQL 文をこのオプティマイザを通して最適化するものです。SQL 文のパフォーマンスが低すぎると判断したため、SQL 文を最適化します。この最適化操作は、オプティマイザが行うことです。

明らかに、オプティマイザーは SQL ステートメントを最適化できるため、パフォーマンスに一定の利点がありますが、欠点もあります。例えば:

「自分で最適化すると a になりますが、実際の実行は a にはなりません。最適化プログラムは最適化が不十分であると判断するため、結果として a が b になります。つまり、明らかに a と記述しましたが、プログラムは b を実行します。」

これはすでに最適化されているため、開発プロセスに混乱を引き起こすことになります。あなたが書いた内容は、以前書いた内容と一致しなくなりました。

3番目の層: エンジン層

さまざまなデータ保存方法を提供しますが、最も一般的なものは、lnnoDB、MylSAMです。

主な違い:

lnnoDB [MySQL のデフォルト]: 設計されたときは、トランザクション ファーストでした [高同時実行操作に適しています] 原則: 行ロックなので、すべてのデータをロックする必要があります。ロックしすぎると、パフォーマンスが低下します。パフォーマンスは低下しますが、高同時実行に適しており、エラーが発生しにくいです。

MylSAM: パフォーマンス優先の原則: テーブルロックなので、テーブル内の10個のデータは影響を受けず、10個のロックが一度に完了するため、パフォーマンスが高速です。

パフォーマンスの優先順位は分かりやすいです。例えば、データが 10,000 個ある場合、処理が速いほど効率が高くなります。

いくつかの同時操作を防ぐためのものです。同時操作が多すぎるとエラーが発生する可能性があるため、同時操作が多い場合に適しています。

なので、プロジェクトを行う際、データベースを構築する際、パフォーマンスを優先する場合はMySAMエンジンを選択します。同時実行性の高い操作の場合はlnnoDBエンジンを選択します。以下ではエンジンの変更方法についてお話します。

レイヤー4: ストレージレイヤー

これは分かりやすいですね。最終的なデータはストレージ層に保存されます。

4つの層について話した後、考えを明確にしましょう

まず、クライアントが選択操作を送信します---> 接続層がそれを受信し、サービス層に送信します---> サービス層はクエリを最適化し、最適化結果をエンジン層に渡します---> 現在のデータベースのエンジンを選択します。エンジンを選択した後、エンジンは最終データをストレージ層に送信します---> ストレージ層はストレージ層を使用してデータを保存します。

ビューエンジン

エンジンを表示; MySQL でサポートされているすべてのエンジンを表示します

実行結果:

Yes はサポートを意味します。InnoDB サポート オプションでは DEFAULT (デフォルト) であり、これはデータベースを作成するときにデフォルトのエンジンが InnoDB であることを意味します。

データベースで現在使用されているエンジンを表示する

'%storage_engine%' のような変数を表示します。

実行結果:

明らかに、現在InnoDBを使用しています

データベースオブジェクトのエンジンを指定します

今、テーブルを作成しています。このテーブルにはInnoDBではなくMySAMを使用しています。パフォーマンスを優先したいからです。次に、mysqlコマンドラインを使用してテーブルを作成します。

1. データベースコマンドを指定する: データベース名を使用する

2. 指定されたデータベースに単純なテーブルを作成する

テーブルtbを作成(

id int (4)、

名前varchar(5),

主キー(ID)

)ENGINE=MyISAM;

実行結果:

これは、作成が成功し、テーブルのエンジンがデフォルトのものではなく、手動で指定したものであることを示しています。

以上がMySQLの実行原理、論理階層化、データベース処理エンジンの変更に関する知識ポイントです。123WORDPRESS.COMをご愛読いただき、ありがとうございます。

以下もご興味があるかもしれません:
  • 重複したMySQLレコードを現場でチェックし、処理する実践的な記録
  • MySQL の重複データの処理方法 (防止と削除)
  • 重複データの処理に関するMySQL学習ノート
  • MySQLデータの同時更新を処理する方法
  • MySQLが大量のデータを処理する際にクエリ速度を最適化するいくつかの方法
  • MySQLデータ処理のソートと追加、削除、変更の操作の説明

<<:  テキストの円形スクロールアニメーションを実装するミニプログラム

>>:  Windows 10 サブシステム Ubuntu (WSL) に Docker をインストールするチュートリアル (画像とテキスト付き)

推薦する

CSS リスト モデルでのマーカー タグの使用

この記事では主に、 list-itemの下にある::master疑似要素、 list-style-i...

SQL文のANDとORの実行順序で発生する問題

質問昨日、データベースSQLを書いているときに問題が発生しました。問題の根本は、SQL ステートメン...

Centos 7 64 ビット デスクトップ バージョンのインストール グラフィック チュートリアル

システムが遅いと感じてソースを変更したい場合は、別の記事で整理しました https://blog.c...

フロントエンド JavaScript でローカルあいまい検索機能を実装する方法の例

目次1. プロジェクトの見通し2. 知識ポイントObject.assign() の使用法filter...

div が iframe に覆われるいくつかの状況とその解決策

類似の構造:コードをコピーコードは次のとおりです。 <div></div>&...

HTML 内の CSS および JS リンクのバージョン番号 (キャッシュを更新)

背景検索エンジンで「.htaccess キャッシュ」というキーワードを検索すると、ウェブサイトのファ...

LINUX ポートが占有されているかどうかを確認します

ポートが占有されているかどうかは、これまで一度もわかりませんでした。多くの人に尋ねて、ようやくわかり...

mysql8.0.14.zip のインストール中にデータ フォルダを自動的に作成できませんでした。サービスを開始できません。

今日システムを再インストールした後、コンピューターに mysql を再インストールし、ZIP ファイ...

HTML ページの先頭に戻るいくつかの実装の概要

最近、ウェブサイトを開発する際にトップに戻るボタンを作成する必要がありますが、私は主にバックエンドの...

UDP 接続オブジェクトの原理分析と使用例

以前、UDP を使い始めるために簡単な UDP サーバーとクライアントの例を作成しましたが、実際に使...

Docker での WSL の構成と変更の問題について

https://docs.microsoft.com/ja-jp/windows/wsl/wsl-...

MySQL 8.0.22 の最新バージョンのダウンロードとインストールの超詳細なチュートリアル (Windows 64 ビット)

目次序文1. 公式サイトからMySQL 8.0.22をダウンロードする2. 環境変数を設定する3. ...

HTML Web ページ リスト タグ学習チュートリアル

HTML Web ページ リスト タグの学習チュートリアル。 HTML ページでは、リストはアウトラ...

MySQL データベースの操作とデータ型

目次1. データベース操作1.1 データベースの表示1.2 データベースを作成する1.3 データベー...

CSSでフォントアイコンを使用する方法をお教えします

まず、フォントアイコンとは何でしょうか?表面的にはアイコンですが、実際はテキストです。テキストの設定...