mysql - -编辑-我无法通过重新启动服务器或使用多个查询来清除MySQL查询缓存

标签 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-重置查询缓存后:

<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查询缓存???

最佳答案

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

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

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

无论如何,我总是会忽略查询的第一次执行 - 只是为了让操作系统和磁盘缓存预热,因此使用上述方法将结果基于后续执行。

关于mysql - -编辑-我无法通过重新启动服务器或使用多个查询来清除MySQL查询缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9211756/

相关文章:

ios - 如何检查用户是否购买了消耗品?

sql - SQL Server 是否缓存查询结果?

mysql - 如何将datagridview表中的值与自定义结合起来

c# - 如何从数据库读取图形图像并将其作为文件粘贴到剪贴板?

php - SQL 查询在第三个 AND 附近不起作用

C# 架构建议 : method to cache data in a structure?

php - 更改 Twig 缓存文件权限以清除缓存

php - 将选项标记为已选择

php - 将数据从 MySql Server 传输到 Android App

mysql - Doctrine 级联更新 - 在坚持更新之前重置子实体