MySQLの最適化の詳細な分析とパフォーマンス

MySQLの最適化の詳細な分析とパフォーマンス

導入

データベースを使用したことがある人なら、機能面での like 記号と = 記号の類似点と相違点をご存知でしょう。ここで簡単にまとめてみましょう。

1. 相違点: Like はあいまい検索に使用できますが、'=' はこの機能をサポートしていません。次の例のように、フィールド ID の最初の文字が 1 である情報テーブルのデータをクエリします。

ID が '1%' のような情報から * を選択します。

2. 類似性: 正確な検索には、「like」と「=」の両方を使用できます。

たとえば、次の例はすべて、フィールド ID が '12345' に等しい info テーブルの結果をクエリします。

IDが '12345' のような情報から * を選択します。

上記は、返される結果における like と '=' の類似点と相違点です。すると、好奇心旺盛な友人たちは、処刑のプロセスはどうなっているのかと尋ねるかもしれません。 MySQL の実行プロセスは、like または '=' に遭遇しても同じですか?

そうです、物事は見た目だけで判断してはいけません。よく調べてみると、「いいね」と「=」はそれほど単純ではないことがわかります。以下では、この2つの違いを詳しく分析します~~~

文章

まず、MySQL の explain キーワードを紹介します。explain は実行プランを意味します。つまり、このコマンドを使用してこの SQL がどのように実行されるかを確認します。
使用方法も非常に簡単で、explain + sql ステートメントを使用します。例:

説明 select * from info where id like '12345';

次に、explain を使用して like および = の下にあるクエリをテストします。まず、インデックス付きフィールドをテストします。

説明選択
 * 
から
 crms_顧客 
どこ
 id = '7cf79d7c8a3a4f94b5373b3ec392e32d';

ここで、「=」を「like」に置き換えて試してみましょう。

説明選択
 * 
から
 crms_顧客 
どこ
 id は '7cf79d7c8a3a4f94b5373b3ec392e32d' のようになります。

比較すると、返された 2 つの結果の type フィールドと Extra フィールドのデータが異なっていることがわかります。なぜ異なるのでしょうか。また、どのような意味があるのでしょうか。

タイプフィールド

タイプ フィールドはオプションの値であり、値は次のように最低パフォーマンスから最高パフォーマンスの順に並べ替えられます。

タイプ例示する
システムシステム、テーブルには 1 行のみが含まれます (= システム テーブル)。これは const join 型の特殊なケースです。
定数定数。テーブルには一致する行が最大で 1 つあります。行が 1 つしかないため、この行の列値は、オプティマイザの残りの部分によって定数とみなされます。定数テーブルは 1 回だけ読み取られるため、高速です。
EQ_REF検索時に主キーまたは一意の型を使用する
参照インデックスで1つ以上の値を検索する
インデックスマージ複数の単一列インデックスを使用して検索するためにインデックスをマージする
範囲インデックス列の範囲を検索する
索引完全なインデックステーブルスキャン
全て完全なテーブルスキャン

表からわかるように、const は定数検索、RANGE はインデックス列の範囲検索なので、パフォーマンスが明確に反映されています。

では、like クエリを使用する場合、Extra フィールドは何を表すのでしょうか?追加フィールドの「どこを使用する」とはどういう意味ですか?

追加フィールド

1. Extra フィールドも Explain 出力の非常に重要な列であり、MySQL クエリ オプティマイザのクエリ実行プロセス中のクエリ プランの重要な補足情報を表します。

2. Extra フィールドで where を使用すると、ストレージ エンジンが行を取得した後に MySQL サーバーがフィルタリングすることになります。したがって、「=」を使用する場合と比較して、検索プロセスに 1 つのステップが追加されます。

明らかに、上記の要約から、条件付きクエリにインデックス フィールドを使用する場合、 '=' のパフォーマンスは like よりも高速であると結論付けることができます。

これで終わりだと思いますか?

しかし、

インデックス以外のフィールドについてはどうなのかと尋ねる友人もいるかもしれません。

はい、インデックスされていないフィールドのテストを続けましょう。

説明選択
 * 
から
 crms_顧客 
どこ
 customer_name = '張飛';
-----------------------------------
 
説明選択
 * 
から
 crms_顧客 
どこ
 customer_name LIKE '張飞';

「=」を除いて同じ 2 つのステートメントを実行してみましょう。
"=":

のように:

非インデックスフィールドの場合は、like と "=" は同じであり、パフォーマンスに違いがないことがわかります。

(もちろん、explain には他にもたくさんのフィールドがあり、後ほど一つずつ説明していきます。)

結論は

絶え間ない努力の結果、like と "=" を非インデックス フィールドを使用してクエリした場合、パフォーマンスは同じであるという結論を導き出すことができます。インデックス フィールドを使用する場合、"=" はインデックスに直接ヒットし、一度だけ読み取られますが、like は範囲クエリを必要とするため、"=" の方が like よりもパフォーマンスが優れています。 ~~~~

これで、MySQL の like and = パフォーマンスの最適化に関するこの記事は終了です。MySQL の like and = パフォーマンスに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL での %% のようなファジークエリの実装
  • MySQL での LIKE 句の使用に関するチュートリアル
  • MySQL でのテーブルレプリケーション: create table like および create table as select
  • MySQL のあいまいクエリと正規表現の概要
  • MySQL の Like の概念と使用法の説明

<<:  Linux ipcsコマンドの使用

>>:  VueプロジェクトでReactを書く方法の詳細

推薦する

WIN2008 サーバーのコマンド ラインを使用して IIS7 コンポーネントをインストールおよびアンインストールする方法

注意: .NET FrameWork はコア モードで実行できないため、コア インストール モードの...

CSS3 でテキスト ストロークを実装する 2 つの方法 (要約)

質問最近、以下に示すように、テキストストローク効果を実現するという要件に遭遇しました。 解決策1まず...

Linux での MySQL 8.0.11 のインストールに関するチュートリアル

1. 公式サイトにアクセスしてインストールパッケージをダウンロードしますダウンロードリンク: クリッ...

動的な色切り替えの実装コードをサポートするために、CSS で SVG 画像を参照します。

表示する svg 画像を追加すると、React はファイルが見つからないというメッセージを表示します...

あまり使われていない、または誤解されている HTML タグ 10 個

ここでは、あまり使われていない、または誤解されている 10 個の HTML タグを紹介します。あまり...

MySQL 8.0.20でNavicatをインストールして接続する方法と注意すべき点

注意事項1. まず、mysql インストール ディレクトリに次の内容の my.ini ファイルを作成...

6つの珍しいHTMLタグ

まず: <abbr> または <acronym>これら 2 つの記号は同じ意...

dockerを使用してTomcatをデプロイし、Skywalkingに接続する

目次1. 概要2. dockerを使用してTomcatをデプロイし、Skywalkingに接続する要...

Nginx ロードバランシングとは何か、そしてそれをどのように設定するか

負荷分散とは負荷分散は主に、専用のハードウェア デバイスまたはソフトウェア アルゴリズムによって実現...

Dockerでホストファイルをカスタマイズする方法について簡単に説明します

目次1. コマンド2. docker-compose.yml 3. Dockerファイル4. 直接変...

Linux の Centos7 に Mysql5.7.19 をインストールする詳細なチュートリアル

1. MySQLをダウンロードするURL: https://dev.mysql.com/downlo...

nginxとIISで使用できるSSL証明書を作成する

目次SSL証明書の作成1. 秘密鍵を生成する2. 証明書要求ファイルを生成する3. CRT証明書ファ...

MySQL シリーズ 8 MySQL サーバー変数

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...

Mac 向け MySQL のインストールと設定のチュートリアル

この記事では、MacでのMySQLインストールチュートリアルを参考までに紹介します。具体的な内容は次...

SSDストレージを有効にしたMySQLインスタンスの詳細な説明

SSDストレージを有効にしたMySQLインスタンスの詳細な説明特に OS と MySQL が同じディ...