我的问题是,如果我运行一个查询两次,则不会在第二个查询的performance_schema中再次计算Digest和Digest_text
示例:
SELECT * FROM state;
events_statements_history_long中的输出看起来像:
SQL_TEXT:SELECT*FROM状态
DIGEST:f9842414749bcda76ef05940ebc2f84
数字文本:SELECT*FROM州
锁定时间:372000000
如果我再次运行查询,events_statements_history_long看起来像:
SQL_TEXT:SELECT*FROM状态
DIGEST:null
数字文本:null
锁定时间:0
同样奇怪的是,LOCK_TIME
的值在第二次尝试时为0。在没有进行DIGEST计算的情况下,是否正在进行一些优化
我可以在所有有摘要列的表中看到这种行为。例如
- events_statements_history_long(列
digest
和digest_text
( - events_statements_history(列
digest
和digest_text
( - objects_summary_global_by_type(列
count_star
不增加( - events_statements_summary_by_digest(列
count_star
不增加(
我的猜测是,如果查询没有更改,则不会重新计算这些值。此外,如果我使用where
子句进行查询,则仅当子句发生更改时(例如,从where foo='bar'
到where foo='foo'
(才计算摘要,而如果没有发生更改则不计算摘要。
所以我的问题是:是否有一些设置(我没有通过谷歌或文档找到(可以在每条语句的任何表中打开摘要计算?
查询缓存是否已打开?QC很早就进行了摘要,如果看到相同的摘要,则返回先前返回的结果集。也就是说,避免了语句执行。