ホームページ  >  記事  >  データベース  >  MySQL データベースの最適化に関する知識は何ですか?

MySQL データベースの最適化に関する知識は何ですか?

PHPz
PHPz転載
2023-05-31 16:04:061233ブラウズ

データベースの最適化は、システムのボトルネックを特定し、MySQL データベース全体のパフォーマンスを向上させることである一方で、ユーザーの応答速度を向上させるために合理的な構造設計とパラメーターの調整が必要であると同時に、ユーザーがシステムに大きな負荷を与えることができるように、システム リソースをできる限り節約することも必要です。

1. 最適化概要チャート

MySQL データベースの最適化に関する知識は何ですか?

2. 最適化

著者は、最適化をソフト最適化とハード最適化の 2 つのカテゴリに分類しており、一般にソフト最適化にはデータベースの操作が含まれ、ハード最適化にはサーバー ハードウェアの操作とパラメーター設定が含まれます。 2.1 ソフトの最適化

2.1.1 クエリ文の最適化

1. まず、EXPLAIN または DESCRIBE (略称: DESC) コマンドを使用して、クエリ ステートメントの実行情報を分析できます。 2.例:

DESC SELECT * FROM `user`

見せる:############### インデックス数やクエリデータの読み込みデータなどの情報が表示されます。

2.1.2 サブクエリの最適化

MySQL では、サブクエリの代わりに JOIN を使用してみてください。サブクエリにはネストされたクエリが必要であるため、クエリをネストすると一時テーブルが作成されます。一時テーブルの作成と削除には大きなシステム オーバーヘッドがかかりますが、結合クエリではテーブルが作成されません。一時テーブルなので、ネストされたサブクエリよりも効率的です。

2.1.3 インデックスの使用MySQL データベースの最適化に関する知識は何ですか?## インデックス作成は、データベース クエリの速度を向上させる最も重要な方法の 1 つです。インデックス作成については、著者の記事

を参照して詳細を確認してください。インデックスを使用する際の 3 つの主な注意事項を次に示します:

1. LIKE キーワードは、「%」で始まる文字列と一致し、インデックスを使用しません。

2. このクエリでインデックスを使用する前に、OR キーワードの両方のフィールドにインデックスを付ける必要があります。

3. 複数列インデックスの使用は、左端の一致を満たす必要があります。

2.1.4 分解表数据库索引> 多くのフィールドを含むテーブルで、一部のフィールドの使用頻度が低い場合は、フィールドを分離して新しいテーブルを形成する必要があります。

2.1.5 中間テーブル

クエリに多数の接続が必要なテーブルの場合は、クエリ中に消費される接続時間を短縮するために中間テーブルを作成できます。

2.1.6 冗長フィールドの追加

中間テーブルの作成と同様に、冗長性を追加すると、接続クエリが削減されます。

2.1.7 分析テーブル、チェックテーブル、最適化テーブル

テーブルの分析では主にテーブル内のキーワードの分布を分析し、テーブルのチェックでは主にテーブルに誤りがないかどうかを確認し、テーブルの最適化では主に削除や更新によるテーブル領域の無駄を排除します。 1. テーブルの分析: ANALYZE TABLE user;

などの ANALYZE キーワードを使用します。 Op: 実行する操作を示します。

Msg_type: ステータス、情報、メモ、警告、エラーなどの情報タイプ。

MySQL データベースの最適化に関する知識は何ですか? Msg_text: 情報を表示します。

  1. 2. テーブルのチェック: CHECK TABLE user [option]
  2. などの CHECK キーワードを使用します。 このオプションは MyISAM に対してのみ有効で、合計 5 つのパラメータ値が指定されます:

  3. クイック: ラインをスキャンしたり、接続不良をチェックしたりしないでください。

高速: 正しく閉じられなかったテーブルのみをチェックします。

変更済み: 前回のチェック以降に変更されたテーブルと、正しく閉じられていないテーブルのみをチェックします。

  1. 中: 行をスキャンして、削除された接続が有効であることを確認し、各行のキーワード チェックサムも計算します。

  2. 拡張: 最も包括的な検査、各行のキーワードの包括的な検索。

  3. 3. テーブルを最適化します。OPTIMIZE [LOCAL|NO_WRITE_TO_BINLOG] TABLE user;
  4. などの OPTIMIZE キーワードを使用します。 LOCAL|NO_WRITE_TO_BINLOG は、ログに書き込まないことを意味します。最適化されたテーブルは、VARCHAR、BLOB、および TEXT に対してのみ有効です。ファイルの断片化は OPTIMIZE TABLE ステートメントによって排除でき、実行中に読み取り専用ロックが追加されます。

  5. 2.2 ハード最適化
  6. 2.2.1 3 ピースのハードウェア セット

  7. 1. マルチコアおよび高周波数 CPU を構成します。マルチコアは複数のスレッドを実行できます。
2. 大きなメモリを構成し、メモリを増やしてキャッシュ容量を増やすと、ディスク I/O 時間が短縮され、応答速度が向上します。

3. 高速ディスクを構成するか、ディスクを合理的に分散します。高速ディスクは I/O を向上させ、分散ディスクは並列操作の能力を向上させることができます。 2.2.2 データベースパラメータの最適化

データベース パラメータを最適化すると、リソースの使用率が向上し、MySQL サーバーのパフォーマンスが向上します。MySQL サービスの構成パラメータはすべて my.cnf または my.ini にあります。パフォーマンスに大きな影響を与えるいくつかのパラメータを次に示します。

key_buffer_size: インデックスバッファサイズ


table_cache: 同時に開くことができるテーブルの数


query_cache_size と query_cache_type: 前者はクエリ バッファ サイズ、後者は前のパラメータのスイッチです。0 はバッファを使用しないことを意味し、1 はバッファを使用することを意味しますが、クエリで使用できます。 SQL_NO_CACHE はクエリ バッファを使用しないことを意味します。バッファ、2 はクエリ内の意味です。バッファは、バッファ、つまり SQL_CACHE を使用する場合にのみ使用する必要があることが明確に指摘されています。 sort_buffer_size: ソートバッファ
2.2.3 サブデータベースとサブテーブル

データベースに過大な負荷がかかるため、最初の問題は、過度のデータベース負荷がパフォーマンスに影響を与えるため、ピーク時にシステムのパフォーマンスが低下する可能性があることです。もう 1 つは、過度の圧力によりデータベースがクラッシュした場合はどうすればよいでしょうか?したがって、この時点では、システムをデータベースとテーブルに分割し、読み取りと書き込みを分離する、つまり、1 つのデータベースを複数のデータベースに分割し、複数のデータベース サービスにデプロイする必要があります。このとき、データベースはメイン データベースとして機能します。書き込みリクエストを処理します。次に、各マスター ライブラリが少なくとも 1 つのスレーブ ライブラリをマウントし、スレーブ ライブラリが読み取り要求を処理します。

MySQL データベースの最適化に関する知識は何ですか?

2.2.4 キャッシュクラスター

ユーザー数が増加した場合は、マシンを追加し続けることができます。たとえば、システム レベルでマシンを追加し続けると、より多くの同時リクエストを処理できるようになります。その後、データベース レベルでの書き込み同時実行性がますます高くなると、データベース サーバーが拡張され、サブデータベースとテーブルのシャーディングによってマシンが拡張され、データベース レベルでの読み取り同時実行性がますます高くなると、容量が増加します。拡張され、さらにスレーブ データベースが追加されます。しかし、ここには大きな問題があります。データベース自体は、実際には大量の同時リクエストを処理するために使用されていないため、一般的に言えば、1 台のデータベース マシンが実行する同時実行数は 1 秒あたり数千のオーダーであり、データベースで使用されるマシンは比較的高構成で比較的高価なマシンでは、コストが非常に高くなります。単純にマシンを追加し続けるのは実際には間違っています。したがって、キャッシュは通常、高同時実行性のアーキテクチャに組み込まれており、キャッシュ システムは高い同時実行性を実現するように設計されています。したがって、単一マシンが実行する同時実行の量は 1 秒あたり数万、場合によっては数十万に達し、高同時実行の実行能力はデータベース システムの実行能力よりも 1 ~ 2 桁高くなります。したがって、書き込みが少なく読み取りが多いリクエストに対して、システムのビジネス特性に応じてキャッシュ クラスターを完全に導入できます。具体的には、データベースに書き込むときに、データのコピーが同時にキャッシュ クラスターに書き込まれ、キャッシュ クラスターが読み取りリクエストのほとんどを処理するために使用されます。この場合、キャッシュ クラスタリングを通じて、より少ないマシン リソースを使用して、より高い同時実行性をホストできます。

MySQL データベースの最適化に関する知識は何ですか?

以上がMySQL データベースの最適化に関する知識は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。