0はじめに
この記事では、MySQL、関連スロークエリの最適化を導入しています。
MySQLのスロークエリログはログで、MySQLの文では、実行時間を記録するために使用することができ、指定long_query_timeのSQL文を超え、デフォルト値は10秒long_query_timeある
データがログに保存されるための環境下でスロークエリログは、デフォルトでオンになっていません、テスト環境を手動で開くことができ、パフォーマンスに何らかの影響を持っているが、その後手動で開くだけで、このスタートで動作するために注意を払う、mysqlは閉じた後に(ウィンドウシステムの下で)変更のmy.ini設定ファイルを永続的な効果を取るために、デフォルトの状態を復元し、再起動他のシステム変数もそう。「%slow_query_log%」ショーvaraiblesは好きログ開いた場合を表示します
1クエリ最適化
1.1説明+ SQL文:この文を実行する開発者は、SELECT文の実装の詳細を確認することができ、開発者はゆっくりと上のステップ実行することができ、考えられる原因を決定するための分析で取得されたSQLクエリ文、問い合わせの低効率を問い合わせます
ID:番号選択クエリ
IDが同じで、トップダウン順実行 IDが同じではない、IDより高い優先度の値が大きいほど、実行される最初の IDが値IDルールの異なるセットに従って、グループと同じIDを別の同じを有します2つの優先実行、同一のグループIDを順次の規則に従って実行されます。
SELECT_TYPE:クエリの種類を選択
簡単:これは、クエリが接続サブクエリではないことを示し、UNIONクエリ 最も外側のクエリはサブクエリを有する:プライマリ サブクエリ:サブクエリネストされたクエリは、内側層 と呼ばれる(誘導される)から誘導に含まれる選択します由来は、MySQLの意志を再帰的にこれらのサブクエリ、一時表に結果 組合:秒または最後の労働組合 ユニオン結果:労働組合の結果
テーブル:現在のSQLステートメントの実装とテーブル
パーティション:現在使用されているパーティションテーブルの代表
タイプ:最高の最悪のシステムへ>のconst>でeq_ref>参照>範囲>インデックスのいくつかの一般的なクエリの順序に従って、クエリを使用する方法を示しています>すべての
システム、CONST:MySQLは、クエリ最適化の一部は、この行を選択するためにWHERE句に行方法の主キーとして、これらは、(システムが一つだけ、CONST複数の行を返す)定数に変換可能であることができます主キーは、MySQLは定数にこのクエリに変換することができるようになります。その後、テーブルを効率的にカップリング実行から除去することができる でeq_ref:ルックアップ・インデックスを使用して、MySQLのマスターキーまたは一意のインデックスルックアップ使用する場合に使用することができる既知のデータまで戻り 、非一意のインデックス・ルックアップ・インデックス:REF 範囲:他に間またはとともに、例えば走査範囲、>、<、 インデックス:インデックスはすべての行をスキャンし 、すべての:データの全ての行をスキャン
possible_keys / kesy:インデックスとインデックスの実際の使用は、代わって使用することができます
key_lenに:インデックスのバイト数
REF:それは前の列または定数に使用されるインデックスキー列に記録された値にルックアップテーブルを示しています
行:行数の推定値を見つけるためにmysqはラインの走査に必要な条件を満たしています
プロフィールを見る1.2:mysqlのプロフィールを見るには、SQLクエリツールのリソース使用状況を分析するために使用されます
文がプロファイルを示した後、私たちは、SQL文を実行するいくつかのテストを実行します
私たちは、SQL文の解析を指定した項目を指定するために選択することができます
私たちのビューがあるという二つのモジュールのIOの一般的性質とCPUブロック
注意:
次のいずれかの状況が発生した場合、我々はそれを最適化する必要が悪いSQL文だったと述べています
- MyISAMテーブルのクエリ結果にconveringヒープが大きすぎて、十分ではないメモリを、あなたがディスクに記録する必要があります
- データを保存するために一時テーブルを作成するために、TMPのテーブルを作成し、後に疲れ削除
- ディスクに一時テーブルにデータを格納するために、ディスク上のテーブルをtmpにするためにコピー
- ロック
2索引チューニング
どのような状況は、インデックスを構築する必要がありますか?
- 主キー、ユニークインデックス
- 多くの場合、クエリ条件の指標として使用
- 多くの場合、私たちは、グループ化、インデックスの統計情報をソートする必要があります
- 他のテーブル、外部キー関係インデックスに関連付けられているクエリ
どのような場合には、インデックスを構築していませんか?
- テーブルのレコードは、あまりにも、あなたは百万についてのインデックスを構築する必要はありません。
- リストに頻繁に追加および削除
- こうした真、偽のように:データを繰り返し、均一にデータを分散しています
- 頻繁に更新フィールド
- 条件は、フィールド内のより少ない場所