クエリ結果キャッシュ
TiDB Cloud Lake は、有効化されている場合、実行された各クエリの結果をキャッシュして永続化します。これにより、回答を得るまでの時間を大幅に短縮できます。
キャッシュの使用条件
クエリ結果は、すべての条件を満たした場合にのみキャッシュから再利用されます。
クイックスタート
セッションでクエリ結果キャッシュを有効にします。
-- Enable query result cache
SET enable_query_result_cache = 1;
-- Optional: Cache all queries (including fast ones)
SET query_result_cache_min_execute_secs = 0;
設定
パフォーマンス例
この例では、TPC-H Q1 クエリをキャッシュする方法を示します。
1. キャッシュを有効化する
SET enable_query_result_cache = 1;
SET query_result_cache_min_execute_secs = 0;
2. 1 回目の実行(キャッシュなし)
SELECT
l_returnflag,
l_linestatus,
sum(l_quantity) as sum_qty,
sum(l_extendedprice) as sum_base_price,
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
avg(l_quantity) as avg_qty,
avg(l_extendedprice) as avg_price,
avg(l_discount) as avg_disc,
count(*) as count_order
FROM lineitem
WHERE l_shipdate <= add_days(to_date('1998-12-01'), -90)
GROUP BY l_returnflag, l_linestatus
ORDER BY l_returnflag, l_linestatus;
結果: 4 行、21.492 秒(6 億行を処理)
3. キャッシュエントリを確認する
SELECT sql, query_id, result_size, num_rows FROM system.query_cache;
4. 2 回目の実行(キャッシュから)
同じクエリを再度実行します。
結果: 4 行、0.164 秒(処理行数 0)
キャッシュ管理
キャッシュ使用状況を監視する
SELECT * FROM system.query_cache;
キャッシュされた結果にアクセスする
SELECT * FROM RESULT_SCAN(LAST_QUERY_ID());
キャッシュのライフサイクル
キャッシュされた結果は、次の場合に自動的に削除されます。
- TTL の期限切れ(デフォルト: 5 分)
- 結果サイズが上限を超過(デフォルト: 1MB)
- セッション終了(キャッシュはセッションスコープ)
- 基になるデータの変更(整合性のため自動的に無効化)
- テーブル構造の変更(スキーマ変更によりキャッシュが無効化)