mysql query query exclumization:a deep dive
mySQLクエリを実行すると、クエリオプティマイザーは実行計画を作成します。 この計画を検査するには、EXPLAIN
コマンドを使用します。 EXPLAIN
は、遅いクエリを理解して最適化するために非常に貴重ですが、多くの開発者はそれを十分に活用していません。この記事では、EXPLAIN
の出力とスキーマとクエリの最適化への適用について説明します。
キーテイクアウト:
EXPLAIN
decipher EXPLAIN
、type
、possible_keys
、key
、rows
)。
Extra
JOIN
およびWHERE
を使用してください。
EXPLAIN EXTENDED
SHOW WARNINGS
EXPLAIN
を理解しています
で接頭するだけです。基本的な例を分析してみましょう:
EXPLAIN
サンプル出力は次のようになる場合があります:
SELECT
この一見簡潔な出力には情報が豊富です。 重要な列は次のとおりです
id
:クエリ内の各SELECT
のシーケンシャル識別子(ネストされたサブ征服に関連)。
select_type
サブクエリのない簡単なクエリを示します
SELECT
SIMPLE
:行で参照されています。UNION
table
、type
、完全なテーブルスキャンを示します)。
system
const
:mysqlが潜在的に使用できるキー。 eq_ref
関連するインデックスがないことを提案します
ALL
possible_keys
NULL
:選択されたインデックスの長さ。key
:possible_keys
列のインデックスと比較した列または定数。
key_len
とサブ征服を使用して、潜在的な最適化のニーズを示しています。
ref
key
rows
JOIN
Extra
パフォーマンスの低いクエリの最適化を説明しましょう。 インデックスがないeコマースデータベース(githubで利用可能)を検討してください。書かれていないクエリは、次のようになるかもしれません: の、および非常に高い 条項で使用される列に)パフォーマンスを劇的に改善します。インデックスを追加した後に 別の例には、2つのテーブルのA 概要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>
EXPLAIN
が含まれます。
NULL
適切なインデックスがない場合、possible_keys
には完全なテーブルスキャンが表示されます。 インデックスを追加して、key
サブQueries内にrows
条件を戦略的に配置すると、スキャンされた行の数を大幅に減らすことができます。
JOIN
EXPLAIN
EXPLAIN
MySQLクエリの最適化の味方です。 その出力を分析することにより、パフォーマンスのボトルネックを識別して対処し、より効率的でより速いクエリにつながることができます。 単にインデックスを追加するだけで十分ではないことを忘れないでください。クエリ構造も重要な役割を果たします。 特に動的なアプリケーションでは、EXPLAIN
の定期的な使用は、データベースの健康を維持するための鍵です。
以上が説明を使用して、より良いmysqlクエリを書きますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。