我正在测试MySQL中一些查询的速度。数据库正在缓存这些查询,这使得我在测试这些查询有多快时很难得到可靠的结果。
是否有方法禁用查询的缓存?
系统:MySQL 4在Linux主机上,我可以访问PHPMyAdmin。
谢谢
我正在测试MySQL中一些查询的速度。数据库正在缓存这些查询,这使得我在测试这些查询有多快时很难得到可靠的结果。
是否有方法禁用查询的缓存?
系统:MySQL 4在Linux主机上,我可以访问PHPMyAdmin。
谢谢
当前回答
有一个问题
SELECT SQL_NO_CACHE * FROM TABLE
方法的缺点是,它似乎只会阻止查询的结果被缓存。但是,如果您正在查询一个正在与您想要测试的查询一起使用的数据库,那么其他客户机可能会缓存您的查询,从而影响您的结果。我正在继续研究解决这个问题的方法,如果我找到了一个,我会编辑这篇文章。
其他回答
尝试在查询中使用SQL_NO_CACHE (MySQL 5.7)选项。 (MySQL 5.6用户点击这里)
eg.
SELECT SQL_NO_CACHE * FROM TABLE
这将停止MySQL缓存结果,但是请注意,其他操作系统和磁盘缓存也可能影响性能。这些都很难绕过。
另一个只影响当前连接的选项:
SET SESSION query_cache_type=0;
在查询中使用用户定义的变量会使查询结果不可缓存。我发现它是一个比使用SQL_NO_CACHE更好的指示器。但是你应该把变量放在一个变量设置不会严重影响性能的地方:
SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;
您也可以运行以下命令来重置查询缓存。
RESET QUERY CACHE
您必须更改SQL字符串。因为SQL字符串是一个缓存键。 例如,为SQL注释添加时间戳。
PHP函数:
function db_RunSQL($SQL, $NoCacheMode=false)
{
$SQL = (($NoCacheMode) ? '/*'.time().'*/ ' : '') . $SQL;
return mysqli_query(db_SavedConnect(), $SQL);
}