Mysql SQL查询缓存
我知道SQL查询将使用查询缓存来接收数据,而不是重新处理所有数据。我想问的问题是 我使用数据库服务器,我是开发人员之一,我需要对我处理的查询进行性能测试 如果我清除查询缓存 使用Mysql SQL查询缓存,mysql,sql,caching,Mysql,Sql,Caching,我知道SQL查询将使用查询缓存来接收数据,而不是重新处理所有数据。我想问的问题是 我使用数据库服务器,我是开发人员之一,我需要对我处理的查询进行性能测试 如果我清除查询缓存 使用刷新查询缓存的示例或重置查询缓存, 它会影响其他开发人员还是只清除本地查询缓存 如果它会影响其他人,是否有办法在本地清除或允许我的查询不会使用查询缓存进行测试请尝试在查询中使用SQL\u NO\u缓存选项。这将停止MySQL缓存结果 SELECT SQL_NO_CACHE * FROM TABLE 使用SQL Serv
刷新查询缓存的示例
或重置查询缓存代码>,
它会影响其他开发人员还是只清除本地查询缓存
如果它会影响其他人,是否有办法在本地清除或允许我的查询不会使用查询缓存进行测试请尝试在查询中使用SQL\u NO\u缓存选项。这将停止MySQL缓存结果
SELECT SQL_NO_CACHE * FROM TABLE
使用SQL Server for cached data,您可以使用并强制手动
但是,它在服务器(实例)级别工作:
使用DBCC DROPCLEANBUFFERS使用冷缓冲区缓存测试查询,而无需关闭和重新启动服务器
要从缓冲池中删除干净的缓冲区,首先使用检查点生成冷缓冲区缓存。这将强制将当前数据库的所有脏页写入磁盘并清理缓冲区。执行此操作后,可以发出DBCC DROPCLEANBUFFERS命令以从缓冲池中删除所有缓冲区
编辑*
SQL查询缓冲区缓存是全局的,但不是本地的。如果缓冲区或查询缓存被丢弃,它将全局丢弃,并将影响所有使用数据库服务器的用户。首先要澄清两个问题:
- MySQL查询缓存是一种服务器端功能,没有“本地缓存”这样的东西。您可能被
FLUSH
命令中的LOCAL
关键字弄糊涂了。如前所述,它只是NO_WRITE_TO_BINLOG
的别名(因此它与复制相关,“local”表示“此服务器”)
- MySQL只会在您启用该功能并将其设置为默认值或选择使用
SQL\u缓存
提示的情况下返回缓存数据。根据我的经验,大多数服务器默认情况下都没有
现在让我们回答你的问题。目前,我们可以阅读:
查询缓存在会话之间共享,因此
可以发送一个客户机来响应另一个客户机发出的相同查询
客户
这是有道理的:不能重用存储数据的缓存没有那么有用
我不知道你到底想测试什么。您的数据应始终是最新的:
查询缓存不返回过时数据。修改表时,
将刷新查询缓存中的所有相关条目
但是,您可能希望了解查询运行所需的时间。您可以随时选择退出:
服务器不使用查询缓存。它既不检查查询
缓存以查看结果是否已缓存,也不缓存
查询结果
只需考虑第二次运行的查询即使没有缓存也可能运行得更快,因为部分数据段可能已经加载到RAM中。DBCC DROPCLEANBUFFERS'正在为整个服务器?清理缓冲区缓存?。。有没有办法在本地清除它,而不是整个服务器?检查点记录从内存到磁盘的所有内容,然后DROPCLEANBUFFERS清除缓冲区(因为所有内容都已记录)。但这是针对SQLServer的(在您提到MySQL之前)。它会清除服务器上的整个缓存。缓存对于每个人来说都是SQL Server实例的全局缓存,并且未链接到特定用户。确定。。谢谢它可能与全局保存缓存的MySQL相同。还不太确定。。如果是的话,我会做更多的研究。我很可能会把它标记为MySQL和SQL服务器的解决方案。这通常是缓存背后的目标我知道这不是回答者的错,而是MySQL!=SQL Server!=我将SQL Server放回原处并添加了SQL,因为这个问题现在不仅与MySQL相关。它是否仅适用于SELECT*?因为当我像从表中选择SQL\u NO\u CACHE[value]这样使用它时,它声明SQL\u NO\u CACHEread more的列名无效@Dean@Dean这是一个MySQL扩展;该语法在其他DBMS上不起作用。