MySQL は、多くの Web サイトやアプリケーションで広く使用されている、人気のあるオープン ソース データベース管理システムです。重要なパフォーマンス向上メカニズムの 1 つはクエリ キャッシュです。クエリ キャッシュは、MySQL が SELECT ステートメントの結果セットをキャッシュするために使用するメカニズムです。クエリがキャッシュされると、MySQL は結果セットをメモリに保存し、同じクエリが再度リクエストされたときに、クエリを再度実行するのではなく、キャッシュされた結果を返します。理想的な状況では、クエリ キャッシュによりクエリのパフォーマンスが大幅に向上します。ただし、クエリ キャッシュが適切に構成および最適化されていない場合、パフォーマンスに悪影響を及ぼす可能性があります。したがって、この記事では、MySQL クエリ キャッシュを最適化してパフォーマンスを向上させる方法について説明します。
- クエリ キャッシュの構成
クエリ キャッシュを有効にするには、MySQL 構成ファイルでクエリ キャッシュ サイズを設定し、キャッシュ機能を有効にする必要があります。 My.cnf ファイルに次の構成を追加します。
query_cache_type = 1
query_cache_size = 128M
query_cache_type はキャッシュ タイプを指定します。値 1 はクエリ キャッシュが有効であることを意味し、値 0 はクエリ キャッシュが無効であることを意味します。
query_cache_size はキャッシュのサイズを指定します。キャッシュできるすべてのクエリ結果セットの合計サイズを指定します。その値は、システム メモリと負荷の要件に基づいて調整する必要があります。キャッシュが小さすぎる場合、すべての結果セットがキャッシュされるわけではありません。キャッシュが大きすぎると、メモリが無駄に消費され、パフォーマンスが低下する可能性があります。
- 長時間実行されるクエリを避ける
クエリ キャッシュは SELECT クエリにのみ適用され、キャッシュされた結果はクエリ結果セットが変更されていない場合にのみ返されます。したがって、クエリ結果セットが頻繁に変更されると、クエリ キャッシュの有効性が大幅に低下します。また、クエリの実行時間が長いと、キャッシュされた結果をメモリに保持する必要があり、キャッシュ内の結果が古い場合には、キャッシュを更新するためにクエリを再実行する必要があるため、クエリ キャッシュの効率が低下します。したがって、キャッシュ効率を向上させるために、実行時間の長いクエリは可能な限り回避する必要があります。
- 異なるクエリの作成を避ける
同じ SQL ステートメントとクエリ パラメーターを持つ複数のクエリがある場合は、プリペアド ステートメントを使用することでクエリ キャッシュの効率を向上させることができます。準備されたステートメントを使用すると、SQL ステートメントのコピーを通じて同じパラメーターを送信する代わりに、パラメーターを名前でバインドできます。この方法では、複数の SQL クエリを 1 つにマージでき、クエリ キャッシュにキャッシュする必要があるクエリ結果セットは 1 つだけです。
- 不要なクエリ キャッシュのクリアを無効にする
データ テーブルが変更されるときはクエリ結果セットをクリアする必要があります。これは通常、INSERT、UPDATE、および DELETE ステートメントの実行時に発生します。ただし、常にキャッシュをクリアすると、キャッシュのパフォーマンスが無駄になります。したがって、必要なキャッシュのみをクリアし、不要なクエリ キャッシュのクリアを無効にすることを選択する必要があります。クエリ キャッシュを無効にするには、SQL_NO_CACHE キーワードを SQL クエリに追加します。
- クエリ キャッシュ統計を有効にする
MySQL は、クエリ キャッシュの使用状況を把握するために使用できるクエリ キャッシュ統計を提供します。 SHOW STATUS コマンドを使用して、クエリ キャッシュ統計を表示できます。これらの統計は、キャッシュ ヒット率、キャッシュ使用量などに関する情報を提供します。この情報は、クエリ キャッシュのパフォーマンスのボトルネックを特定し、キャッシュの使用効率を調べるのに役立ちます。
- 適切なキャッシュ項目の選択
デフォルトでは、MySQL は、結果セットが非常に小さい場合でも、すべての SELECT ステートメントの結果セットをキャッシュします。ただし、ほとんどの小さな結果セットは二度と使用されない可能性があるため、キャッシュが無駄になる可能性があります。この無駄を避けるために、クエリ中に SQL_CACHE キーワードまたは SQL_NO_CACHE キーワードを使用して結果セットをキャッシュするかどうかを選択できます。
- クエリ キャッシュの更新
データベース テーブルが変更されると、クエリ キャッシュ内の対応するクエリ結果も更新する必要があります。ただし、このプロセスには大量の CPU リソースとメモリ リソースが必要です。この状況を回避するには、チェックおよびリフレッシュ手法を使用してクエリ キャッシュを更新します。このテクノロジーにより、MySQL はキャッシュ全体をクリアするのではなく、クエリ キャッシュの更新が必要な部分のみを更新できます。
つまり、MySQL クエリ キャッシュの最適化がパフォーマンス向上の鍵となります。クエリのパフォーマンスは、適切なクエリ キャッシュ サイズの構成、長時間実行クエリの回避、プリペアド ステートメントの使用、不要なクエリ キャッシュのクリアの無効化、クエリ キャッシュ統計の有効化、適切なキャッシュ エントリの選択とクエリ キャッシュの更新、およびオーバーヘッドの削減によって改善できます。
以上がMySQL クエリ キャッシュを最適化してパフォーマンスを向上させる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。