mysqlnd_qc
PHP Manual

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

SQL ヒント関係

例1 SQL ヒント定数の利用

クエリキャッシュは、SQL ヒントで制御します。 SQL ヒントを使って、キャッシングを有効または無効にします。 SQL ヒントを使うと、クエリの TTL を設定できます。

クエリキャッシュが認識する SQL ヒントは、コンパイル時に手動で変更できます。 そのため、デフォルトの SQL ヒントが他のシステムによってすでに取り入れられて、 解釈・実行された環境でも mysqlnd_qc を使えます。 この理由から、クエリ文字列にデフォルトの SQL ヒントを手動で追加するよりも SQL ヒント文字列定数を使うことを推奨します。

<?php
/* 可搬性を最大にするために定数を使用 */
$query "/*" MYSQLND_QC_ENABLE_SWITCH "*/SELECT id FROM test";

/* 有効ですが、可搬性がより少なくなります: デフォルトの TTL */
$query "/*qc=on*/SELECT id FROM test";

/* 有効ですが、可搬性がより少なくなります: ステートメント TTL 単位 */
$query "/*qc=on*//*qc_ttl=5*/SELECT id FROM test";

printf("MYSQLND_QC_ENABLE_SWITCH: %s\n"MYSQLND_QC_ENABLE_SWITCH);
printf("MYSQLND_QC_DISABLE_SWITCH: %s\n"MYSQLND_QC_DISABLE_SWITCH);
printf("MYSQLND_QC_TTL_SWITCH: %s\n"MYSQLND_QC_TTL_SWITCH);
?>

上の例の出力は以下となります。

MYSQLND_QC_ENABLE_SWITCH: qc=on
MYSQLND_QC_DISABLE_SWITCH: qc=off
MYSQLND_QC_TTL_SWITCH: qc_ttl=

MYSQLND_QC_ENABLE_SWITCH (string)
クエリをキャッシュに格納できるようにするために使用する SQL ヒント。
MYSQLND_QC_DISABLE_SWITCH (string)
mysqlnd_qc.cache_by_default = 1 の場合に クエリをキャッシュに格納できないようにするために使用する SQL ヒント。
MYSQLND_QC_TTL_SWITCH (string)
結果セットの TTL を設定するために使用する SQL ヒント。
MYSQLND_QC_SERVER_ID_SWITCH (string)
この SQL ヒントは、通常は使うべきではありません。 これは、PECL/mysqlnd_ms でひとつのステートメントのキャッシュエントリをグループ化するけれども 個々のキャッシュエントリの元となる物理的な接続が異なる場合に必要となるものです。 このヒントを使うと、クエリキャッシュのキーを生成するときに ユーザーやホスト名そして文字セットといった接続時の設定を考慮しません。 接続時の設定のかわりに、指定した値やクエリ文字列をハッシュ関数への入力として渡してキーを生成します。 PECL/mysqlnd_ms may は、指示された場合にキャッシュの結果を MySQL レプリケーションのスレーブから取得します。 スレーブへの接続は多数保持できるので、キャッシュのキーはユーザーやホスト名などの設定から作成するべきではありません。 これらはスレーブ接続によっていろいろ変化するからです。 そのかわりに PECL/mysqlnd_ms が提供する識別子は、 スレーブへの接続をグループ化したものを参照します。 これで、どの物理的なスレーブ接続がキャッシュエントリを生成したかにかかわらず、 キャッシュエントリを共有できるようになります。 この機能を PECL/mysqlnd_ms 以外で使うことはおすすめしません。

mysqlnd_qc_set_cache_condition() 関係

例2 mysqlnd_qc_set_cache_condition() の使用例

mysqlnd_qc_set_cache_condition() 関数を使うと、ステートメントの自動キャッシュを行うための条件を設定できます。 SQL ヒントがついていないために手動でのキャッシュが必要となるステートメントであっても、条件を満たせば自動でキャッシュされます。

<?php
/* "db_example" スキーマ(データベース) にある "new%" という名前のテーブルへのアクセスをすべて 1 秒間キャッシュします */
if (!mysqlnd_qc_set_cache_condition(MYSQLND_QC_CONDITION_META_SCHEMA_PATTERN"db_example.new%"1)) {
  die(
"Failed to set cache condition!");
}

$mysqli = new mysqli("host""user""password""db_example""port");
/* SQL ヒントはありませんが、これはキャッシュされます */
$mysqli->query("SELECT id, title FROM news");

$pdo_mysql = new PDO("mysql:host=host;dbname=db_example;port=port""user""password");
/* SQL ヒントもないし、パターンにもマッチしないのでキャッシュされません */
$pdo_mysql->query("SELECT id, title FROM latest_news");
/* パターンにマッチするので、TTL 1 秒でキャッシュされます */
$pdo_mysql->query("SELECT id, title FROM news");
?>

MYSQLND_QC_CONDITION_META_SCHEMA_PATTERN (int)
mysqlnd_qc_set_cache_condition() のパラメータとして使い、 スキーマベースの自動キャッシュの条件を設定します。


mysqlnd_qc
PHP Manual