我正在测试MySQL中某些查询的速度。数据库正在缓存这些查询,这使我很难在测试这些查询的速度时获得可靠的结果。
有没有一种方法可以禁用查询的缓存?
系统:在Linux虚拟主机上使用MySQL 4,我可以访问PHPMyAdmin。
谢谢
我正在测试MySQL中某些查询的速度。数据库正在缓存这些查询,这使我很难在测试这些查询的速度时获得可靠的结果。
有没有一种方法可以禁用查询的缓存?
系统:在Linux虚拟主机上使用MySQL 4,我可以访问PHPMyAdmin。
谢谢
Answers:
尝试在查询中使用SQL_NO_CACHE(MySQL 5.7)选项。(MySQL 5.6用户单击此处)
例如。
SELECT SQL_NO_CACHE * FROM TABLE
这将停止MySQL缓存结果,但是请注意,其他操作系统和磁盘缓存也可能会影响性能。这些很难解决。
对当前日期/时间的任何引用都将禁用该选择的查询缓存:
SELECT *,NOW() FROM TABLE
请参见“使用MySQL查询缓存的先决条件和说明” @ http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html
还有一个配置选项:query_cache_size = 0
要在服务器启动时禁用查询缓存,请将query_cache_size系统变量设置为0。通过禁用查询缓存代码,不会有明显的开销。如果您从源代码构建MySQL,则可以通过使用--without-query-cache选项调用configure来将查询缓存功能完全从服务器中排除。
我会使用以下内容:
SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';
在查询中使用用户定义的变量会使查询的结果不可缓存。我发现它比使用更好SQL_NO_CACHE
。但是您应该将变量放置在变量设置不会严重影响性能的地方:
SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;
SQL_NO_CACHE
。” 为何如此?似乎您需要一个非常有力的案例来对显式关键字使用晦涩的破解,除非显式关键字没有按照其要求进行操作。