Mysql の遅いクエリは影響を与えます。その理由は次のとおりです: 1. インデックスがないか、インデックスが使用されていない; 2. 低い IO スループットがボトルネックを形成している; 3. メモリが不足している; 4. ネットワーク速度遅い; 5. 1つのクエリ データ量が多すぎる; 6. デッドロックが発生する。
このチュートリアルの動作環境: Windows 7 システム、mysql バージョン 8.0.22、DELL G3 コンピューターこの方法は、すべてのブランドのコンピューターに適しています。
関連する無料学習の推奨事項: mysql ビデオ チュートリアル
mysql の遅いクエリは影響力があります。
クエリが遅い一般的な理由は次のとおりです:
1. インデックスがないか、インデックスが使用されていません。
PS: インデックスは、特定の値を持つレコードをすばやく検索するために使用されます。すべての MySQL インデックスは B ツリーの形式で保存されます。インデックスがない場合、クエリを実行するときに、MySQL は要件を満たすレコードが見つかるまで、テーブル全体のすべてのレコードを最初のレコードからスキャンする必要があります。テーブル内のレコードの数が増えるほど、この操作のコストも高くなります。検索条件として使用されるカラムにインデックスが作成されている場合、MySQL はレコードをスキャンすることなく、目的のレコードの位置を迅速に取得できます。テーブルに 1000 レコードがある場合、インデックスを使用してレコードを検索すると、レコードを順次スキャンするよりも少なくとも 100 倍高速になります。
インデックス タイプ:
通常のインデックス: これは、一意性などの制限がない、最も基本的なインデックス タイプです。
一意のインデックス: 基本的には通常のインデックスと同じですが、一意性を維持するためにすべてのインデックス列は 1 回しか出現できません。
主キー: 主キーは一意のインデックスですが、「PRIMARY KEY」として指定する必要があります。
フルテキスト インデックス: MYSQL は、3.23.23 以降、フルテキスト インデックスとフルテキスト検索をサポートします。 MYSQL では、フルテキスト インデックスのインデックス タイプは FULLTEXT です。フルテキスト インデックスは、VARCHAR 型または TEXT 型の列に作成できます。
#2. IO スループットが低いことがボトルネックとなります。
PS: これは、MYSQL がより多くの IO を消費するというシステム層からの分析です。一般的なデータベース監視では、IO にもより注意が払われます。
監視コマンド: $iostat -d -k 1 10
パラメーター -d は、デバイス (ディスク) の使用状況を表示することを示します。 -k ブロック単位を使用する一部の列は、強制的に表示されます。キロバイトを使用します。単位; 1 10 は、データ表示が 1 秒ごとに更新され、合計 10 回表示されることを意味します。
3. メモリ不足
メモリ使用量の監視: vmstat [-n] [遅延 [回数]]
Memory
swpd: スワップ メモリ上のメモリに切り替えます (デフォルトは KB)
• swpd の値が 0 ではない場合、または 100M を超えるなど比較的大きい場合でも、長期的な値はof si および so は 0 ですが、この状況について心配する必要はありません。システムのパフォーマンスには影響しません。
free: 空き物理メモリ
buff: バッファ キャッシュとして使用されるメモリ、ブロック デバイスの読み取りおよび書き込みのバッファリング
cache: ページ キャッシュ、ファイル システム キャッシュとして使用されるメモリ• キャッシュ値が大きい場合は、キャッシュ内に多くのファイルが存在することを意味し、頻繁にアクセスされるファイルをキャッシュできれば、ディスクの読み取り IO Bi は非常に小さくなります。
4. ネットワーク速度が遅い
IP -t を実行して、パケット損失があるかどうかを確認します。
5. 1 つのクエリのデータ量が多すぎます。
たとえば、ページング クエリがない場合は、一度に数万のレコードを抽出できます。データベースが停止している可能性があります。
6. デッドロックの発生
いわゆるデッドロックとは、実行中に 2 つ以上のプロセスがリソースを競合して発生する状況を指します。
Show innodb status はエンジンのステータスをチェックし、どのステートメントがデッドロックを引き起こしているかを確認できます。
show processlist を実行してデッドロック スレッド番号を確認し、プロセス No
7 を強制終了します。不要な行または列が返されます
一般的なクエリ SQL ステートメント Be必ずフィールドを明示的に指定してください。
8 のクエリには * を使用しないでください。UNIon と UNIon all の違いに注意してください。 UNION はすべて有効です
UNION はテーブルのリンク後に重複レコードを除外するため、テーブルのリンク後に生成された結果セットを並べ替え、重複レコードを削除して結果を返します。したがって、すべての合体効率は高くなければなりません。
以上がmysql の遅いクエリには影響がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。