我正在审阅我的查询,并且我一直在阅读有关如何在SQL_NO_CACHE
查询中使用SELECT
的文章。这让我感到困惑,因为最后的每篇文章都对何时使用它有不同的结论。我读过的一个博客说,如果您有相同的查询并且是唯一的,则应该使用此博客。我在另一个博客上读到,当您必须提取永远不变的信息时,应该使用它。
有人可以解释什么时候使用此方法是一种好习惯吗?我知道有人问过它,但是阅读很多文章并没有帮助,尤其是当人们说在不同情况下使用此方法时。我做了一些理论上的假设,有人可以告诉我使用SQL_NO_CACHE
是否有益。谢谢,对于再次提出的问题,我深表歉意。我真的很困惑。
userID
,查询仅在登录检查过程中运行。 a
中选择一些数据以更新表b
中的字段,是否应该在表SQL_NO_CACHE
的选择上使用a
? 谢谢你。
最佳答案
SQL_NO_CACHE
只需在SELECT语句的SELECT部分之后和字段列表之前添加SQL_NO_CACHE。下面的第一个查询将在启用查询并被缓存的情况下使用查询缓存:
SELECT * FROM table WHERE search= 'keyword'; //lets take 1ms
下面的第二个查询将不使用查询缓存:
SELECT SQL_NO_CACHE * FROM table WHERE search= 'keyword'; //lets take ~0.2ms at 2nd time
在对查询进行基准测试时,这特别有用。如果启用了查询缓存,尽管第一个查询可能需要一些时间,但第二个及后续查询几乎是即时的。使用SQL_NO_CACHE可以确保不使用查询缓存,并且可以安全地比较结果时间。
SQL_NO_CACHE提示针对特定查询关闭MySQL的内置查询缓存机制。通过对高度动态的查询(例如关键字搜索或仅每晚运行的报告)使用此提示,可以帮助MySQL提高查询缓存的效率。
确保查询缓存已打开,否则不需要此命令。
什么是SQL_CACHE和SQL_NO_CACHE?
SQL_CACHE和SQL_NO_CACHE选项影响查询结果在查询缓存中的缓存。 SQL_CACHE告诉MySQL将结果存储在查询缓存中,如果它是可缓存的,并且query_cache_type系统变量的值为2或DEMAND。使用SQL_NO_CACHE,服务器不使用查询缓存。它既不检查查询缓存以查看结果是否已缓存,也不缓存查询结果。 (由于解析器中的限制,空格字符必须在SQL_NO_CACHE关键字之前和之后;空格(例如换行符)会导致服务器检查查询缓存以查看结果是否已缓存。)
根据我的意见,如果启用了“CACHE”并且数据库中的数据是动态更新的,则可以使用NO_CACHE,即不能依赖数据库数据缓存,例如:存储用户密码哈希,由于频繁发生,我们不能依赖CACHE数据变更的可能性
有用方案的更新
1)强制不使用缓存来测试查询速度