SQL判断
これは、問題があるかどうかを判断する2つのSQLの出現によって判断することができます。
システムレベルの表現
CPUの消費厳しいです
IOは深刻待ちます
ページの応答時間が長すぎます
このようタイムアウトエラーログなどのアプリケーション
あなたは、現在のシステムの状態を表示するsarコマンド、topコマンドを使用することができます。
ステータスはプロメテウス、Grafana観測システムや他の監視ツールがあります。(記事あなたは私の前で見ることができます興味のある)640?Wx_fmt = PNG
SQL文の表現
長いです
実行時間が長すぎます
全表スキャンからデータを取得します。
実施計画の行は、多くの費用
長いSQLをよく理解している、SQLは、読書の時間は確かに悪くなる長すぎる、との問題の頻度は確かに高くなります。次のようにさらに質問が、判定SQLの実行計画から開始する必要があり:? 640 wx_fmt = PNG
実施計画は、基本的には、これはSQLの「味」で決定することができる(9950400)ALL、行偉大=全表スキャンクエリの種類を行くことを教えてくれる。
SQLアクセスの問題
異なるデータベースは、現在主流のスロークエリSQLデータベースを取得するために、以下のツールを別の取得方法を持っています
MySQLの
スロークエリログ
テストツールLoadRunnerは
Perconaツールなど、同社のptqueryとして
オラクル
AWRレポート
このようLoadRunnerのようテストツール
関連する内部ビューV $、$ SESSION_WAITなど
GRID CONTROL監視ツール
データベースをアップドリーム
AWRレポート
このようLoadRunnerのようテストツール
DaMengのパフォーマンス監視ツール(DEM)
関連する内部ビューV $、$ SESSION_WAITなど
SQLのライティングスキル
SQLライタは、以下の一般的なヒントがあります:
•インデックスの使用の合理化
インデックスはあまりスロークエリ、インデックス、より広い空間、時に動的なインデックスを維持するために必要なCRUD文を実行し、選択高のパフォーマンスに影響を与える(重複した値以下)と頻繁にここで、B-treeインデックスを確立する必要性を挙げています。
一般的には結合列をインデックスを作成する必要があります。フルテキストインデックスクエリの効率を使用して、より複雑なドキュメントの種類を、クエリとDMLのパフォーマンスのバランスを取るためにインデックスを付け、注意を払うを非先頭列ベースのクエリにするとき、複合インデックスの作成
•利用代替UNION ALL UNION
効率は、複製を実行するときにUNIONが必要で、UNION ALL UNIONより高い; UNIONの必要性は、データをソートします
•書き込みが選択は避けてください*
あなたがコンクリートの列にSQLオプティマイザ*ターンを実行する必要がある場合には、各クエリは、テーブルに戻ってするには、インデックスをカバーして行くことはできません。
•フィールドインデックスの推奨事項を登録しよう
フィールドプラス一般的なインデックス、事前に登録しよう
•複雑なSQL文を避けてください
読みやすさを向上させる、回避確率スロークエリ、操作終了を処理する、短いクエリを複数に変換することができます。
•避け書き込み1 = 1
•ランドによって避け順()同様の文言
RAND()は、データ列を複数回走査させます
SQLの最適化
実施計画
完全なSQLの最適化は、最初の実行計画を読み取る必要があり、実行計画を最適化することができ、低効率を置いていることを教えてくれます。我々MYSQLたとえば、どのような実施計画はいを参照するには。(各データベースの実施計画は、あなたが自分自身についてを通知する必要があり、同じではありません)説明sql640?Wx_fmt = PNG
フィールドが説明しました
各操作識別子IDを順次操作するオブジェクトIDの値が大きいほど、同じであれば、実行順序上から下へ、最初に実行さを識別する、独立して行われます
クエリselect句の各タイプをSELECT_TYPE
オブジェクト名テーブルは、通常、テーブル名が、他のフォーマットを操作します
パーティションパーティション情報が一致する(非パーティションテーブルに対してNULLです)
タイプタイプ接続動作
possible_keysは、インデックスを使用する場合があります
インデックス(最も重要な列)キーオプティマイザ実際に最高から最悪に使用する接続タイプはCONST、eq_reg、REF、範囲、インデックスおよびALLです。「悪趣味」に登場し、現在のSQLを表しALLときに発生します
バイト単位でkey_lenにオプティマイザ選択されたインデックスキーの長さ
refは基準バンク操作対象オブジェクトを表す、基準オブジェクトが非NULLであります
行のクエリ数(InnoDBのため、この値が推定値である)タプルがスキャン実行しました
タプルの数の割合をろ過条件テーブルデータを濾過しました
追加情報追加の重要な実施計画は、この列がfilesortレコードを使用して表示されたときに、一時的な文字を使用したときに、我々は慎重でなければならないが、おそらく最適化SQL文に必要
次に、我々は、SQL最適化プロセスの最適化と最適化手法を説明するために、いくつかの実際の例を使用します。
最適化のケース
テーブル構造
CREATE TABLEを `A`
(
`Id`あなた(11)NOT NULLAUTO_INCREMENT、
`seller_id` BIGINT(20)デフォルトNULL、
`seller_name` VARCHAR(100)文字セットUTF8 COLLATE utf8_bin DEFAULT NULL、
`gmt_create` VARCHAR(30)デフォルトNULL、
PRIMARY KEY( `id`)
);
TABLE 'B'のCREATE
(
`Id`あなた(11)NOT NULLAUTO_INCREMENT、
`seller_name` VARCHAR(100)デフォルトNULL、
`user_id` VARCHAR(50)デフォルトNULL、
`user_name` VARCHAR(100)デフォルトNULL、
`sales` BIGINT(20)デフォルトNULL、
`gmt_create` VARCHAR(30)デフォルトNULL、
PRIMARY KEY( `id`)
);
CREATE TABLEを 'C'
(
`Id`あなた(11)NOT NULLAUTO_INCREMENT、
`user_id` VARCHAR(50)デフォルトNULL、
`order_id` VARCHAR(100)デフォルトNULL、
`state` BIGINT(20)デフォルトNULL、
`gmt_create` VARCHAR(30)デフォルトNULL、
PRIMARY KEY( `id`)
);
三つの相関テーブル、クエリ、ユーザーの10時間、現在時刻の前後の受注、および順序に基づいて昇順で作成された時、以下の特定のSQL
a.seller_idを選択し、
a.seller_name、
b.user_name、
c.state
から、
B、
C
どこa.seller_name = b.seller_name
そしてb.user_id = c.user_id
そしてc.user_id = 17
そして、a.gmt_create
( - 600 MINUTE NOW()、INTERVAL)DATE_ADD BETWEEN
(NOW()、INTERVAL 600 MINUTE)AND DATE_ADD
a.gmt_createによってオーダー。
データの量を確認します
640?wx_fmt = PNG
640のオリジナル実行時間?Wx_fmt = PNG
オリジナル実行計画640?Wx_fmt = PNG
予備的最適化のアイデア
SQL、テーブル構造を維持するタイプフィールドとの条件が一致して、テーブルは、USER_ID VARCHAR(50)タイプ、実際のSQLとint型であり、暗黙的な変換は、インデックスを追加することなく、存在します。テーブルにB、Cは、フィールドのintをUSER_ID。
b及びc関連テーブルのテーブルが存在するため、B及びインデックステーブルUSER_IDを作成cは
相関テーブルとテーブルBの存在によって、及びBは、インデックステーブルSELLER_NAMEを作成するためのフィールドであります
複合インデックスを使用すると、一時テーブルやソートを排除します
予備的最適化のSQL
ALTER表Bは `user_id` INT(10)は、デフォルトのNULLを変更します。
ALTERテーブルは `user_id` INT(10)は、デフォルトのNULLを修正C;
ALTERテーブルは `idx_user_id`(` user_id`)インデックスを追加℃;
ALTER表Bの追加インデックス `idx_user_id_sell_name`(` user_id`、 `seller_name`)。
ALTER TABLE追加インデックス `idx_sellname_gmt_sellid`(` gmt_create`、 `seller_name`、` seller_id`)。
実行時間の最適化の見直し後
640?wx_fmt = PNG
最適化プログラムの実施の見直し後640?Wx_fmt = PNG
ビューの警告情報640?Wx_fmt = PNG
ALTER TABLE aは「gmt_create」日時のDEFAULT NULLを変更する最適化を継続します。
ビューの実行時間
640?wx_fmt = PNG
実行計画を見る640?Wx_fmt = PNG
概要
実行計画を見る説明
アラームがある場合は、アラーム情報ショーの警告を表示。
SQLに関連するビューのテーブル構造とインデックス情報
実施計画によると、可能な最適化のポイントを考えて
インデックスを追加、最適化ポイントを実行することができるテーブル構造の変化に応じて、SQL書き換え
実行計画を表示した後、実行時間を最適化
最適化の効果が明らかでない場合には、