MySQL の最適化に関しては、最適化の方法について話す前に、まず現在の SQL ステートメントが実際のデータベースでどのように実行されるかを知る必要があります。 MySQL には、ステートメントの実行をシミュレートするための非常に便利なキーワード EXPLAIN が用意されています。 EXPLAIN を使用すると、SQL ステートメントの実行効果を表示できます。これにより、より適切なインデックスを選択してクエリ ステートメントを最適化し、より最適化されたステートメントを記述できるようになります。そこで今日は、このキーワードの基本的な使用法と応用についてお話します。 1. 使用方法EXPLAIN の使い方は非常に簡単です。 mysql> EXPLAIN SELECT * FROM user; 簡単に言うと、元の SQL ステートメントの前に EXPLAIN キーワードを追加するか、チェックする SQL ステートメントの後に EXPLAIN キーワードを追加します。 2. 出力結果EXPLAIN ステートメントの出力は、必要なデータであり、分析の焦点となります。 +----+-------------+---------+-----------+-------+---------------+-------+-------+------+------+------+------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+---------+-----------+-------+---------------+-------+-------+------+------+------+------+ | 1 | シンプル | ユーザー | NULL | すべて | NULL | NULL | NULL | NULL | 3 | 100.00 | NULL | +----+-------------+---------+-----------+-------+---------------+-------+-------+------+------+------+------+ EXPLAIN ステートメントでは合計 10 列のデータが返されます。次に、パフォーマンスの最適化においてより重要ないくつかのデータ列の意味を見てみましょう。 1.idこれは選択クエリのシーケンス番号です。 2.選択タイプSQL ステートメントが非選択ステートメント (つまり、削除、更新など) の場合、このフィールドの値は対応する操作タイプ (削除、更新など) になります。 mysql> EXPLAIN INSERT INTO user VAULES(2,'ahong','31'); この時点での出力 select_type は、対応する INSERT です。 +----+-------------+---------+-----------+-------+---------------+-------+-------+------+------+------+------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+---------+-----------+-------+---------------+-------+-------+------+------+------+------+ | 1 | INSERT | ユーザー | NULL | すべて | NULL | NULL | NULL | NULL | NULL | NULL | +----+-------------+---------+-----------+-------+---------------+-------+-------+------+------+------+------+ SQL ステートメントが選択ステートメントの場合、次のようないくつかの詳細な選択タイプに対応します。 SIMPLE: 単純な SELECT (UNION やサブクエリなどは使用しません) PRIMARY: 最も外側のSELECT UNION: UNION 内の 2 番目以降の SELECT ステートメント。DEPENDENT UNION: UNION 内の 2 番目以降の SELECT ステートメントは、外部クエリに依存します。UNION RESULT: UNION の結果。 SUBQUERY: サブクエリの最初のSELECT 依存サブクエリ: 外部クエリに依存するサブクエリ内の最初の SELECT DERIVED: 派生テーブルの SELECT (FROM 句内のサブクエリ) 以下は、可能な限り最も単純な SIMPLE クエリの例です。 mysql> EXPLAIN SELECT * FROM user; +----+-------------+---------+-----------+-------+---------------+-------+-------+------+------+------+------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+---------+-----------+-------+---------------+-------+-------+------+------+------+------+ | 1 | シンプル | ユーザー | NULL | すべて | NULL | NULL | NULL | NULL | 3 | 100.00 | NULL | +----+-------------+---------+-----------+-------+---------------+-------+-------+------+------+------+------+ 3.表この操作でアクセスされたデータがどのテーブルに関するものかを表示します。 4.パーティションテーブルで使用されるパーティションを表示します。10 年間の会社の注文量をカウントする場合は、データを各年ごとに 1 つずつ、10 個のパーティションに分割できます。これにより、クエリの効率が大幅に向上します。 5.タイプこれは最も重要な列です。接続が使用するクラスと、インデックスが使用されるかどうかを表示します。クエリのパフォーマンスを分析するための鍵となります。 システム > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL これらの状況の意味は次のとおりです。
一般的に、クエリが少なくとも範囲レベル、できれば参照レベルに到達するようにする必要があります。そうしないと、パフォーマンスの問題が発生する可能性があります。 6.可能なキークエリ ステートメントで使用される可能性のあるインデックス列を表示します。値は 1 つ、複数、または null のいずれかになります。 7.キーキー列には、クエリ ステートメントで実際に使用されるインデックス列が表示されます。 null の場合、インデックスは使用されません。 mysql> 説明 select * from user where age = 1; 以下の結果が得られます。 +----+-------------+--------+-----------+--------+---------------+-------+-------+-------+------+------+------+------+ | id | select_type | テーブル | パーティション | タイプ | 可能なキー | キー | キー長 | ref | 行 | フィルター済み | 追加 | +----+-------------+--------+-----------+--------+---------------+-------+-------+-------+------+------+------+------+ | 1 | SIMPLE | ユーザー | NULL | ref | 年齢 | 年齢 | 5 | const | 1 | 100.00 | NULL | +----+-------------+--------+-----------+--------+---------------+-------+-------+-------+------+------+------+------+ 8.キーの長さ現在のクエリ ステートメントで使用されるインデックスの長さを表示します。長さが短いほど、精度を失わずに良くなります。 9.参照参照されている前のテーブルの列。 10行MySQL はテーブルとクエリに基づいて、最終結果を返すために調べる必要がある行数を推定します。この列の値が大きいほど、クエリの効率は悪くなります。 11.フィルタリング行列の値と一緒に使用されるパーセンテージ値は、クエリ実行プラン (QEP) 内の前のテーブルの結果セットを推定し、結合操作の反復回数を決定できます。小さなテーブルが大きなテーブルを駆動し、結合の数を減らします。 12.追加MySQL がクエリを解析する方法については、いくつかの種類の追加情報があります。 Extraに含まれる値は次のとおりです。
上記はMySQL EXPLAIN文の使用例の詳しい内容です。MySQL EXPLAIN文の詳細については、123WORDPRESS.COMの他の関連記事もご覧ください。 以下もご興味があるかもしれません:
|
<<: IE アドレスバーのアイコン表示問題を解決する 3 つの手順
>>: 基本的な HTML ディレクトリの問題 (相対パスと絶対パスの違い)
シナリオ:クロールされたデータは、別のメインテーブルと同じ構造を持つデータテーブルを生成するため、マ...
概要港とは何ですか?英語の単語の意味は「港」です。 Harborはコンテナ(貨物)を保管するために使...
目次テーブルを作成するデータベース ファイルを表示します。入れるクエリ消去補足:Mysqlは月テーブ...
ハッシュモード(デフォルト)動作原理:ウェブページのハッシュ値の変化を監視する—> onhas...
目次1. Dockerのセキュリティ問題2. Dockerアーキテクチャの欠陥とセキュリティメカニズ...
目次1. 小道具2..同期3.vモデル4.参照5. $emit/v-on 6. $attrs/$li...
nginx バージョン 1.11.3次の構成を使用すると、検証は無効になり、クロスドメインの問題が依...
1. MySQL マスタースレーブ非同期1.1 ネットワーク遅延MySQLのマスタースレーブレプリケ...
目次序文使い方要約する序文Vue にはコードの再利用に使われる mixins という設定項目がありま...
1.ブラウザでmysqlを検索してダウンロードしてインストールしますアドレス: https://d...
Django Web開発の過程で、HTMLを書く際にバックエンドから同じ名前のリスト変数が渡されるが...
目次序文1. 従来のVueコンポーネント1. メインコンポーネントコード: 2. 使用方法3. 成果...
MySQLはトリガーを使用してデータベース内のテーブルの行制限を解決します。詳細な説明と例最近のプロ...
目次クラスコンポーネントのプロパティ比較浅い同等の浅い比較機能コンポーネントの簡単な比較先週面接に行...
目次1. はじめに2. ルール検証の入力モード2.1 サンプルコード2.2、フォーム項目2.3. 小...