我正在测试MySQL中一些查询的速度。数据库正在缓存这些查询,这使得我在测试这些查询有多快时很难得到可靠的结果。

是否有方法禁用查询的缓存?

系统:MySQL 4在Linux主机上,我可以访问PHPMyAdmin。

谢谢


当前回答

我会使用以下方法:

SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';

其他回答

任何对当前日期/时间的引用都会禁用该选择的查询缓存:

SELECT *,NOW() FROM TABLE

参见“MySQL查询缓存使用的先决条件和注意事项”@ http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html

尝试在查询中使用SQL_NO_CACHE (MySQL 5.7)选项。 (MySQL 5.6用户点击这里)

eg.

SELECT SQL_NO_CACHE * FROM TABLE

这将停止MySQL缓存结果,但是请注意,其他操作系统和磁盘缓存也可能影响性能。这些都很难绕过。

我会使用以下方法:

SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';

您必须更改SQL字符串。因为SQL字符串是一个缓存键。 例如,为SQL注释添加时间戳。

PHP函数:

function db_RunSQL($SQL, $NoCacheMode=false)
{
$SQL = (($NoCacheMode) ? '/*'.time().'*/ ' : '') . $SQL;
return mysqli_query(db_SavedConnect(), $SQL);
}

您也可以运行以下命令来重置查询缓存。

RESET QUERY CACHE