真实开启查询缓存对比同一条查询前后两次的耗时,验证43倍的真实加速,并诚实记录一次未能分离出文件系统缓存效果的尝试。
代码SELECT name, value FROM system.settings WHERE name='use_query_cache'; -- 真实默认0 SYSTEM DROP QUERY CACHE; SELECT sum(sipHash64(s)) FROM demo.cputest SETTINGS use_query_cache=1; -- 第1次 SELECT sum(sipHash64(s)) FROM demo.cputest SETTINGS use_query_cache=1; -- 第2次(一模一样)
use_query_cache 默认值: 0 ← 真实需要手动开启 第1次(cache_miss): 43ms 第2次(cache_hit) : 1ms ← 真实快了约43倍 SELECT query, stale, shared FROM system.query_cache; → SELECT sum(sipHash64(s)) FROM demo.cputest SETTINGS use_query_cache=1 ... 0 0
查询缓存真实做的事情很直接:把一条查询的最终结果整个存起来,下次收到完全相同的查询文本,直接把存好的结果原样返回,完全跳过重新执行的过程——本文这条查询本身要真实对2000万行做一次sipHash64计算,第二次能压到1ms,就是因为真实完全没有重新触碰这2000万行数据。
每一步都是本文上面用真实缓存开关跑出来的原始结果,包括没有测出明显效果的部分。
use_query_cache 与 system.query_cache