据我所知,我无法通过重新启动服务器来清除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-重置查询缓存后:
<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-冲厕后的桌子:
<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查询缓存呢?
发布于 2012-02-09 13:35:10
您可能会发现,即使在重新启动mysql服务器之后,其速度也是如此之快,这是因为o/s也缓存了数据(可能在较小程度上是磁盘本身)。如果您想获得某种形式的标准基准测试,mysql有一个基准测试套件,我相信您可以使用它。
此外,如果将查询更改为:
选择SQL_NO_CACHE perma,title,body MySQL将不会在其查询缓存中检查缓存的结果。
无论如何,我总是忽略查询的第一次执行--只是为了让o/s和磁盘缓存热身,所以使用上面的方法在后续的执行中得到基本结果。
发布于 2012-02-09 13:34:44
您可以使用
RESET QUERY CACHE 或者,清除缓存并关闭所有打开的表。
FLUSH TABLEShttps://stackoverflow.com/questions/9211756
复制相似问题