ホームページ > バックエンド開発 > PHPチュートリアル > 説明を使用して、より良いmysqlクエリを書きます

説明を使用して、より良いmysqlクエリを書きます

Lisa Kudrow
リリース: 2025-02-28 08:32:10
オリジナル
312 人が閲覧しました

mysql query query exclumization:a deep dive

mySQLクエリを実行すると、クエリオプティマイザーは実行計画を作成します。 この計画を検査するには、EXPLAINコマンドを使用します。 EXPLAINは、遅いクエリを理解して最適化するために非常に貴重ですが、多くの開発者はそれを十分に活用していません。この記事では、EXPLAINの出力とスキーマとクエリの最適化への適用について説明します。

Using EXPLAIN to Write Better MySQL Queries

キーテイクアウト:

    クエリ実行計画を分析し、非効率性を特定し、パフォーマンスを向上させるためのレバレッジ
  • クエリ処理を理解し、改善の領域を特定して、EXPLAINdecipher
  • の出力列(例:
  • EXPLAINtypepossible_keyskeyrows)。 Extra
  • または
  • 句の列に基づいてテーブルにインデックスを戦略的に追加して、行スキャンを大幅に削減し、速度を高め、負荷時間を最小化します。 特に複雑な最適化タスクの場合、クエリ変換と実行に関する詳細な洞察については、JOINおよびWHEREを使用してください。 は、特に進化するデータを使用した動的アプリケーションで、最適なデータベースパフォーマンスを維持するために、
  • を使用してSQLクエリを定期的にレビューおよび最適化します。
  • EXPLAIN EXTENDEDSHOW WARNINGS
  • の出力
  • EXPLAINを理解しています

で接頭するだけです。基本的な例を分析してみましょう: EXPLAIN サンプル出力は次のようになる場合があります:

SELECTこの一見簡潔な出力には情報が豊富です。 重要な列は次のとおりです

  • id:クエリ内の各SELECTのシーケンシャル識別子(ネストされたサブ征服に関連)。
  • :クエリのタイプ(シンプル、プライマリ、派生、サブクエリなど)。 select_typeサブクエリのない簡単なクエリを示します SELECTSIMPLE:行で参照されています。UNION
  • :MySQLがテーブルにどのように参加するか。 クエリの書き換えのために欠落しているインデックスまたは領域を識別するために重要です。 値の範囲は、非常に効率的な(table
  • )から非効率的(type、完全なテーブルスキャンを示します)。 systemconst:mysqlが潜在的に使用できるキー。 eq_ref関連するインデックスがないことを提案します ALL
  • :実際のインデックスが使用されます。 オプティマイザーの選択により
  • とは異なる場合があります possible_keysNULL:選択されたインデックスの長さ。
  • keypossible_keys列のインデックスと比較した列または定数。
  • :調べた行の数。 高い価値は、特にkey_lenとサブ征服を使用して、潜在的な最適化のニーズを示しています。
  • :追加情報(たとえば、「一時的な」、「Filesortを使用する」)。 詳細な解釈については、MySQLドキュメントを参照してください ref key
  • 詳細を提供します。 その後
  • を使用して、オプティマイザーによって実行されたクエリ変換を表示します:rows JOIN
  • Extra
でのパフォーマンスのトラブルシューティング

パフォーマンスの低いクエリの最適化を説明しましょう。 インデックスがないeコマースデータベース(githubで利用可能)を検討してください。書かれていないクエリは、次のようになるかもしれません:EXPLAIN EXTENDED SHOW WARNINGS 出力が「すべて」の結合タイプ、

EXPLAIN SELECT * FROM categoriesG;
ログイン後にコピー
および

、および非常に高いEXPLAIN値を明らかにし、各テーブルの完全なテーブルスキャンを示します。これは非常に非効率的です。

プライマリキーとインデックスを追加する(例:

条項で使用される列に)パフォーマンスを劇的に改善します。インデックスを追加した後に

を再実行すると、
<code>********************** 1. row **********************
           id: 1
  select_type: SIMPLE
        table: categories
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 4
        Extra: 
1 row in set (0.00 sec)</code>
ログイン後にコピー
値が大幅に低くなり、より効率的な結合タイプ( "const、" eq_ref ")が表示されます。

別の例には、2つのテーブルのA EXPLAINが含まれます。 NULL 適切なインデックスがない場合、possible_keysには完全なテーブルスキャンが表示されます。 インデックスを追加して、keyサブQueries内にrows条件を戦略的に配置すると、スキャンされた行の数を大幅に減らすことができます。

概要JOINEXPLAIN

EXPLAINMySQLクエリの最適化の味方です。 その出力を分析することにより、パフォーマンスのボトルネックを識別して対処し、より効率的でより速いクエリにつながることができます。 単にインデックスを追加するだけで十分ではないことを忘れないでください。クエリ構造も重要な役割を果たします。 特に動的なアプリケーションでは、EXPLAINの定期的な使用は、データベースの健康を維持するための鍵です。

以上が説明を使用して、より良いmysqlクエリを書きますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート