長い間 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をご愛読いただき、ありがとうございます。 以下もご興味があるかもしれません:
|
<<: テキストの円形スクロールアニメーションを実装するミニプログラム
>>: Windows 10 サブシステム Ubuntu (WSL) に Docker をインストールするチュートリアル (画像とテキスト付き)
基本的な紹介特徴Flexbox は、よりシンプルで効率的なレイアウト方法を提供する CSS 表示タイ...
1. スクリプトを動的に読み込むウェブサイトの需要が高まるにつれて、スクリプトの需要も徐々に増加しま...
iOS 1. URLスキームこのソリューションは基本的に、WeChat、QQ 組み込みブラウザ、QQ...
Linux ストリーム エディターは、データ センターでスクリプトを実行するのに便利な方法です。これ...
MYSQL は、MYSQL サービスやその他のコンポーネントをインストールするためのインストーラ方式...
誰もがテーブルをよく知っているはずです。コード内でよく見かけます。テーブルにスラッシュ ヘッダーを追...
ほとんどの人は、サーバーサイド レンダリング (SSR と呼んでいます) の概念について聞いたことが...
1.前面に書きます:軽量仮想化テクノロジーとして、Docker には継続的インテグレーション、バージ...
Docker コンテナを適用する場合、多くの場合、ホスト ディレクトリを Docker コンテナにマ...
Tencent QQのホームページがリニューアルされ、Webフロントエンド開発がますます注目を集めて...
この記事では、MySQL のスケジュールされたデータベース バックアップ操作の例について説明します。...
JavaScript スクリプトは HTML 内のどこにでも埋め込むことができますが、いつ呼び出され...
<tr> <th width="12%">あああ<...
この記事は主にMySQLの日付処理関数のサンプル分析を紹介します。この記事ではサンプルコードを詳細に...
Nginxは正規表現を使用して、ワイルドカードドメイン名をディレクトリに自動的に一致させます。 Ng...