-EDIT-我无法通过重启服务器或多个查询来清除MySQL查询缓存

时间:2012-02-09 13:29:20

标签: mysql database caching myisam

据我了解,我无法通过重启服务器来清除MySQL查询缓存。

我每次运行sql时都试图将结果与第一个代码块类似

1-这是在重新启动Apache和MySQL之前(第一次使用这些查询):

<0.4280259609>
SELECT perma,title,body
FROM articles WHERE MATCH(title) AGAINST('emerald green bow out listeners')
LIMIT 0,30;
<0.0419809818>
INSERT DELAYED INTO searches (q, date, view) VALUES ('emerald-green-bow-out-listeners', '2012-02-09 15:18:09', 1) ON DUPLICATE KEY UPDATE date='2012-02-09 15:18:09', view=view+1;
<0.412530899>
SELECT q
FROM searches_read WHERE MATCH(q) AGAINST('emerald green bow out listeners') 
LIMIT 20;

2-这是在重启Apache和MySQL之前(第二次使用这些查询):

<0.0016009808>
SELECT perma,title,body
FROM articles WHERE MATCH(title) AGAINST('emerald green bow out listeners')
LIMIT 0,30;
<0.0007231236>
INSERT DELAYED INTO searches (q, date, view) VALUES ('emerald-green-bow-out-listeners', '2012-02-09 15:23:13', 1) ON DUPLICATE KEY UPDATE date='2012-02-09 15:23:13', view=view+1;
<0.0002520084>
SELECT q
FROM searches_read WHERE MATCH(q) AGAINST('emerald green bow out listeners') 
LIMIT 20;

3-这是在重启Apache和MySQL之后:

<0.0021140575>
SELECT perma,title,body
FROM articles WHERE MATCH(title) AGAINST('emerald green bow out listeners')
LIMIT 0,30;
<0.001044035>
INSERT DELAYED INTO searches (q, date, view) VALUES ('emerald-green-bow-out-listeners', '2012-02-09 15:20:14', 1) ON DUPLICATE KEY UPDATE date='2012-02-09 15:20:14', view=view+1;
<0.0018870831>
SELECT q
FROM searches_read WHERE MATCH(q) AGAINST('emerald green bow out listeners') 
LIMIT 20;

4-使用SQL_NO_CACHE:

<0.0009889603>
SELECT SQL_NO_CACHE perma,title,body
FROM articles WHERE MATCH(title) AGAINST('emerald green bow out listeners')
LIMIT 0,30;
<0.0002679825>
INSERT DELAYED INTO searches (q, date, view) VALUES ('emerald-green-bow-out-listeners', '2012-02-09 15:37:23', 1) ON DUPLICATE KEY UPDATE date='2012-02-09 15:37:23', view=view+1;
<0.0008900166>
SELECT SQL_NO_CACHE q
FROM searches_read WHERE MATCH(q) AGAINST('emerald green bow out listeners') 
LIMIT 20;

5- RESET QUERY CACHE之后:

<0.0009641647>
SELECT SQL_NO_CACHE perma,title,body
FROM articles WHERE MATCH(title) AGAINST('emerald green bow out listeners')
LIMIT 0,30;
<0.0002360344>
INSERT DELAYED INTO searches (q, date, view) VALUES ('emerald-green-bow-out-listeners', '2012-02-09 15:39:01', 1) ON DUPLICATE KEY UPDATE date='2012-02-09 15:39:01', view=view+1;
<0.0008797646>
SELECT SQL_NO_CACHE q
FROM searches_read WHERE MATCH(q) AGAINST('emerald green bow out listeners') 
LIMIT 20;

6- FLUSH TABLES之后:

<0.0017900467>
SELECT SQL_NO_CACHE perma,title,body
FROM articles WHERE MATCH(title) AGAINST('emerald green bow out listeners')
LIMIT 0,30;
<0.0010399818>
INSERT DELAYED INTO searches (q, date, view) VALUES ('emerald-green-bow-out-listeners', '2012-02-09 15:40:19', 1) ON DUPLICATE KEY UPDATE date='2012-02-09 15:40:19', view=view+1;
<0.0017001629>
SELECT SQL_NO_CACHE q
FROM searches_read WHERE MATCH(q) AGAINST('emerald green bow out listeners') 
LIMIT 20;

重新启动计算机后,我得到与第一个代码块类似的结果。

请注意以下内容:我重新启动计算机,对于第一次查询,我得到与第一个代码块相似的结果。对于使用不同搜索条件的第二个查询,即“您可以选择更环保的方式”,我得到与第一个代码块相似的结果。

我希望能够将执行时间与不同的表结构进行比较。那么如何才能正确清除MySQL查询缓存???

2 个答案:

答案 0 :(得分:1)

你可能会发现即使在重新启动mysql服务器之后它的速度如此之快的原因是数据也被o / s缓存(可能在较小程度上是磁盘本身)。如果你想获得某种形式的标准基准测试mysql有一个你可以使用的基准测试套件我相信。

另外,如果您将查询更改为:

SELECT SQL_NO_CACHE perma,title,body MySQL不会检查其查询缓存中的缓存结果。

我总是忽略第一次执行查询 - 只是为了让o / s和磁盘缓存热身,所以基于后续执行使用上面的结果。

答案 1 :(得分:0)

您可以使用

RESET QUERY CACHE 

或者,清除缓存并关闭所有打开的表

FLUSH TABLES