ホームページ  >  記事  >  データベース  >  mysqlデータベースクエリキャッシュの原理は何ですか

mysqlデータベースクエリキャッシュの原理は何ですか

coldplay.xixi
coldplay.xixiオリジナル
2020-10-26 11:58:113701ブラウズ

mysql データベース クエリ キャッシュの原理は次のとおりです: 1. SELECT 操作の結果セットと SQL ステートメントをキャッシュします (キーは SQL、値はクエリ結果セットです); 2. 新しい SELECT ステートメントの場合到着したら、この SQL をキーとして使用し、キャッシュ内でクエリを実行し、一致するものがあれば、キャッシュされた結果セットを返します。

mysqlデータベースクエリキャッシュの原理は何ですか

Mysql データベース クエリ キャッシュの原則は次のとおりです:

概要

クエリ キャッシュ (略して QC) は、SELECT ステートメントとそれによって生成されたデータ結果を保存します。何もすることがないので、この話題をまとめてメモしておきたいと思います!

超詳細な mysql データベース クエリ キャッシュの概要、収集する価値あり

mysqlデータベースクエリキャッシュの原理は何ですか

動作原理

  • # #SELECT 操作の結果セットと SQL ステートメントをキャッシュします。キーは SQL、値はクエリ結果セットです。

  • 新しい SELECT ステートメントが到着した場合は、この SQL を次のように使用します。キャッシュ内でクエリするキー、一致する場合、キャッシュされた結果セットが返されます;

  • 一致基準: キャッシュされた SQL ステートメントとまったく同じかどうか SQL の文字大文字と小文字が区別され、間のスペースは単純にキーと値の構造が保存されていると理解されます。キーは SQL で、値は SQL クエリの結果です。照合する場合は、Java の Stringquals() が使用されます。例:

  • ユーザーから年齢を選択し、ユーザーから年齢を選択すると、大文字と小文字が異なるため一致しません。

  • ##用途から年齢を選択し、ユーザーから年齢を選択すると一致しません。スペースが異なるため;
  • sql の両側のスペースは無視でき、キーがトリムされてから、equals と比較されると考えることができます。
mysql 設定パラメータの表示

実行

「%query_cache%」のような変数を表示;

mysqlデータベースクエリキャッシュの原理は何ですか関連するパラメータを確認できます:

    query_cache_type: 0 - クエリ キャッシュを有効にしません。1 - 有効、2 - 有効、デフォルト値は次のとおりです。 0;
  • query_cache_size: キャッシュ領域の合計サイズを設定します。query_cache_size の設定に許可される最小値は 40K です。デフォルトは 1M です。推奨設定は: 64M/128M;
  • query_cache_limit: キャッシュ領域にキャッシュできる単一のクエリ レコード セットの最大サイズを制限します。デフォルト設定は 1M
  • query_cache_type が 1 の場合、クエリ キャッシュ要件が満たされている限り、クライアントのクエリ ステートメントとレコードのすべてのセットをキャッシュできます。SQL_NO_CACHE が SQL に追加された場合、キャッシュされません。
  • query_cache_type が 2 の場合、パラメータ SQL_CACHE が SQL に追加され、クエリ キャッシュの要件を満たしている限り、顧客のクエリ ステートメントとクライアント上のレコード セットをキャッシュできます。
  • #キャッシュ使用状況の表示

##「%Qcache%%」などのステータスを表示;

関連するパラメータを確認できます:

mysqlデータベースクエリキャッシュの原理は何ですか

Qcache_hits: キャッシュ ヒット数;

  • Qcache_inserts: キャッシュ内の挿入数、各キャッシュは 1 を追加します。これはキャッシュの量ではないことに注意してください。

  • クエリ キャッシュを有効にする

オプション query_cache_type = 1 を設定し、query_cache_size を設定します。 = 67108864;

注: query_cache_size の値は 100MB 以内で設定できます。 MySQL では、クエリ キャッシュはグローバル ロックによって制御されており、クエリ キャッシュのメモリ ブロックが更新されるたびにロックする必要があります。

クエリ キャッシュをオフにする

オプション query_cache_type = 0 を設定し、query_cache_size = 0 を設定します。

該当するシナリオ

同じステートメントが頻繁に送信され、テーブル データがあまり頻繁に変更されないシナリオ (一部の静的ページや特定のブロックなど) に使用されます。ページの情報は頻繁に変更されません。

クエリ キャッシュは最新のデータ結果をキャッシュする必要があるため、テーブル データに変更が加えられると (挿入、更新、削除、またはデータ変更を引き起こす可能性のあるその他の操作)、クエリ キャッシュが更新されます。したがって、更新頻度が非常に低く、読み取り専用クエリの頻度が非常に高いシナリオでは、クエリ キャッシュをオンにする方が有利です。

該当しないシナリオ

クエリ キャッシュでは、SQL ステートメント、接続されたデータベース、プロトコル バージョン、文字セット、文字セットなど、2 つの SQL リクエストがまったく同じであることが厳密に要求されます。他の要因もすべて影響します。クエリ キャッシュが適用できないいくつかのシナリオを次に示します:

サブクエリ;

  • プロシージャ、関数、トリガー、およびイベントで呼び出される SQL 、または、これらの結果を参照してください;

  • クエリに BENCHMARK()、CURDATE()、CURRENT_TIME()、CURRENT_TIMESTAMP()、NOW()、SLEEP などの特殊な関数が含まれる場合()、CONNECTION_ID()、CURRENT_DATE()、CURRENT_USER()、PASSWORD()、RAND()、UUID()、ENCRYPT()、LAST_INSERT_ID() など;

  • クエリには、mysql、information_schema、または Performance_schema が含まれます。

  • SELECT...LOCK IN SHARE MODE、SELECT...FOR UPDATE、SELECT..INTO OUTFILE/DUMPFILE、SELECT * FROM... WHERE autoincrement_col IS NULL; に類似したクエリ

  • SELECT 実行プランは一時テーブルを使用します;

  • #テーブルを参照しないクエリ (SELECT 1 2 など);

  • クエリによって警告が生成されました。

  • SQL_NO_CACHE キーワードが SELECT ステートメントに存在します。

  • にはパーティション テーブルが含まれます。

#その他の関連する無料学習の推奨事項:

mysql チュートリアル(ビデオ)

以上がmysqlデータベースクエリキャッシュの原理は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。