有没有方法可以找出从MySQL查询缓存中检索执行的查询?
当然......有很多方法可以计算一般级别(SHOW STATUS LIKE '%qcache%'等)的缓存查询数量,但我想知道当前执行的查询是从MySQL缓存加载的.
例如,在PHP中,该函数mysql_insert_id();在单独的查询中返回最后插入的ID.
在这个方向上,调用元数据函数就好了,mysql_is_query_from_cache($previous_query);以验证先前的查询结果是否实际从MySQL查询缓存中检索出来
有什么想法吗?
Yur*_*riy 10
对于MySQL 5.0及更高版本,您可以使用SHOW PROFILES获取最近查询ID的列表,然后使用SHOW PROFILE FOR QUERY%id_here%查看是否存在对缓存数据的引用.
有关详细信息,请参见http://www.dbasquare.com/2012/04/03/was-a-query-served-from-mysql-query-cache/以及其他一些方法.
谢谢@yuriy,我用你的'SHOW PFOFILE'建议制作了一个代码示例,它就像一个魅力!'SHOW PROFILE FOR QUERY 2'命令给出了一个非常漂亮的结果,"将缓存的结果发送给客户端",这正是我正在寻找的触发器!:)
/* enable profiling */
$result = mysql_query('SET profiling = 1');
/* is profiling ON for this session? */
$result = mysql_query("SHOW VARIABLES LIKE '%profiling%'");
/* execute main query */
$result = mysql_query('SELECT COUNT(*) FROM orders');
/* show overview of current profiles */
$result = mysql_query('SHOW PROFILES');
/* show profiling stats for main query */
$result = mysql_query('SHOW PROFILE FOR QUERY 2');
http://dbm.home.xs4all.nl/mysqlshowprofile2.jpg