序文
この記事そのものではなく、データベースのクエリが遅いだけの可能な要因は、十分ではないメモリとして、低速の接続が範囲を超えています。
以下のパブリック参照番号から、この記事の内容:
テンセントインタビュー:SQLステートメントを実行する理由は何非常に遅いですか?--- Bukanhouhuiシリーズ
私は、パブリックコンテンツの数の私自身の並べ替え要約を作ります
始めます
分類を議論するまず第一に、このクエリは時折スロークエリ効率の場合であり、あるいは効率が遅いクエリの問題となっています。
最初のケースでは、データベースは、他の問題を経験している、それ自体は問題ではない照会することができます。
後者の場合、クエリは、最適化する必要性、問題外でなければなりません
効率性と時折遅い場合
一つの理由:更新「汚い」ページ
「ダーティ」ページとは何ですか
場合は、データベースの挿入または更新操作、データベースは、メモリ・データ・ページのすぐに情報が更新されますが、すぐにディスク上に格納されたデータを更新していないが、そのような権利の時間として、保存するにはログインやり直すことになりますREDOログに情報がディスク上に保存されています
メモリとディスクのページでこのデータ上の異なるデータの場合、私たちが「ダーティ」ページと呼ばれるメモリと、同じメモリとディスク上のデータのデータページは「クリーン」ページと呼ばれます。
あなたが「ダーティ」ページを更新すると、システムは、ディスクに格納されたデータの心と魂を他の操作を一時停止します、それはMySQLの声明をリードする、通常は正常に遅い実行され
ときに「ダーティ」ページを更新します
ケース1:REDOログがいっぱいになりました
ケース2:メモリは十分な時間ではありません
CASE3:mysqlのは、システムがアイドルだと思います
CASE4:MySQLは通常閉じて
二つの理由:データがロックされています
あなたは使用することができますショーprocesslis照会するデータがロックされているかどうかを確認するために、刑の執行の状況を確認するためにtコマンドを
遅い効率の例がありました
一つの理由:データクエリの量が多すぎます
行と列のクエリが不要かどうかを確認するには、かかる記述テーブルからのselect *を使用しないよう
二つの理由:インデックスが使用されていません
インデックスのための大規模なデータ量、全部ではないが、テーブルのインデックスがある場合には時間がかかります。ここでは、インデックスで使用されていない状況が分以上になる可能性が
ケース1:インデックス構築されていません
事例2:失敗のインデックス
インデックスによって引き起こされる故障の原因
* /計算 - 他の組み込み関数または+とインデックス1)列
2)ワイルドカードで始まります
最も密接に最高の原則に反すると一致する3)マルチカラムインデックス
4)又はオペレータ障害指数によって引き起こされる容器、各列の操作がインデックスを持っていない限り、または
単一引用符なし5)文字列
CASE3:間違ったインデックスシステム
システム間違ったインデックスは、実際にインデックス付けの失敗の形ですが、知識への複数の関連として、そう分析するために一人で来ます。
間違ったインデックスシステムは、全表スキャンインデックスは、インデックスをスキャンする行数とを比較した場合、システムに障害が発生したインデックス場合は、より複雑なを使用することを、システムが全表スキャンの仕方によってインデックスを放棄します。
だから、全表スキャン効率よりもインデックスケースが、あまりの使用は、それが発生する時期?
まず、我々はすべての主キー索引が主キーの値で保存するのではなく、主キーのインデックスは、データの行全体を格納されていることを知っています。したがって、非プライマリ第一位置決めキーインデックスの使用は、二倍に主キーインデックスから情報を得るために、プロセス内のデータの行全体を行の主キーの条件を満足します。
データ条件の完全なテーブルを見つけるためにインデックスが満たされている極端な例では、この時間ではなく、マルチインデックス作成プロセスの一連の全表スキャンに比べてインデックスを探しています。
だから、システムはインデックスが最初にスキャンする必要がおおよそどのように多くの行のインデックスを使用するかどうかを判断するかどうかを決定する際に適用する必要があり、システムが多くのことをスキャンする行数を予測した場合、システムは、全表スキャンの形をとるインデックスを放棄することを選択します。
どのようにインデックスをスキャンする行数を決定するためにシステムを使用するには?それはどこだ識別指数。また、ベース、複数の異なる値にインデックスとして知られている識別インデックスは、インデックスのほぼ同じ値を意味し、より高い識別インデックスが表示されることを意味します。
以下、より高い識別指数データクエリ条件が満たされ、システムは小さなスキャン機能を予測します。
そして、差別の指標とどのようにそれを得るために?
サンプリング。サンプリングの方法によって識別指標推定システム。それ以来、あなたはこのエラーを回避したい場合は、システムを使用すると、インデックスの使用を強制することができ、それは人類の考えてこの方法を選択する必要はありませんが、サンプリング誤差があるでしょう
選択 * からのT 指数(A)C > 100 と C < 1000年。
ベースはあなたもコマンドの2行することができ、実際の言葉を満たしていない場合にも、ベースのインデックスを表示するコマンドの最初の行を下回ることがあり、システムがインデックスベースを計算するために再サンプリングすることができます
1つの表示するインデックス からT。 2分析テーブル Tを、
説明することができます+ SQLクエリを参照するSQL文の実行を表示するかの指標の予想される使用
説明このコマンドは私の他のブログ記事を参照することができ、クエリの最適化のMySQLの最適化