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を書く方法の詳細

推薦する

MySQL をベースにしたシンプルな検索エンジンを実装する

目次MySQL ベースの検索エンジンの実装1. ngram全文パーサー2. 全文インデックスを作成す...

Windows サーバー管理におけるセキュリティの考慮事項

ウェブサーバー1. Webサーバーは、wev、cgi、asp機能を無効にするなど、不要なIISコンポ...

IIS 7.5はURL書き換えモジュールを使用してWebページのリダイレクトを実現します。

Apache では構成ファイルで Web ページまたは Web サイトの書き換えを簡単に設定できる...

MYSQL の 10 の典型的な最適化ケースとシナリオ

目次1. SQL最適化の一般的な手順1. SQL実行計画の分析を説明する2. プロフィール分析を表示...

MySQL での coalesce() の使用に関するヒントのまとめ

序文最近、偶然 MySQL の coalesce を発見しました。ちょうど時間があったので、MySQ...

Dockerはホスト間のネットワーク通信を実現するためにMacvlanを導入する

基本的な概念: Macvlanの動作原理: Macvlan は、Linux カーネルでサポートされて...

Portainer を使用して Docker のビジュアル インターフェースを構築する方法

ポーテナーの紹介Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な...

ハイパーリンクに関するいくつかの質問

<br />ポテトチップスパーティーのこのエピソードに参加して、何人かの友達に会えてとて...

より人気がありクリエイティブなダーク背景のウェブデザインの例

暗い背景スタイルのページ デザインは非常に人気があり、シックでエレガント、そして非常にクリエイティブ...

Linux でコマンドまたはプロセスの実行時間を調べる方法

Unix ライクなシステムでは、コマンドまたはプロセスの実行がいつ開始されたか、またプロセスがどのく...

MySQLのSeconds_Behind_Masterの詳細な説明

目次マスターの後ろの秒数オリジナルの実装最終マスタータイムスタンプマスターとのクロック差他の実行時間...

Alibaba Cloud Server の詳細な展開 (グラフィック チュートリアル)

最近、Web 開発のフロントエンドとバックエンドの技術を学んだので、その後の管理を容易にするためにプ...

MySQL マルチテーブルクエリの具体例

1. SELECT句を使用して複数のテーブルをクエリするSELECT フィールド名 FROM tab...

MySQL スローログ実践のまとめ

遅いログクエリ機能スロー ログ クエリの主な機能は、設定された時間しきい値を超える SQL ステート...

FileZilla_Server:425 データ接続を開けない問題を解決する方法

FileZilla Serverをサーバーにインストールすると、425データ接続を開けない問題が発生...