扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章将为大家详细讲解有关如何查询缓存在MySQL中有哪些规则,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
我们提供的服务有:成都做网站、网站设计、微信公众号开发、网站优化、网站认证、平陆ssl等。为上1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的平陆网站制作公司
在登录一个网页后,我们的登录信息就会被网页记录,那么下次打开网站就能直接默认用户登录了。我们在mysql查询缓存中也有这样的使用,已经被查询的语句会放在内存,再次查询就可以直接使用。
1.mysql查询缓存规则
开启了缓存,MySQL Server会自动将查询语句和结果集返回到内存,下次再查直接从内存中取;
缓存的结果是通过sessions共享的,所以一个client查询的缓存结果,另一个client也可以使用
MySQL Query Cache内容为 select 的结果集, cache 使用完整的SQL字符串做 key, 并区分大小写,空格等。即两个SQL必须完全一致才会导致cache命中。即检查查询缓存时,MySQL Server不会对SQL做任何处理,它精确的使用客户端传来的查询,只要字符大小写或注释有点不同,查询缓存就认为是不同的查询;
prepared statement永远不会cache到结果,即使参数完全一样。在 5.1 之后会得到改善。
where条件中如包含任何一个不确定的函数将永远不会被cache, 比如current_date, now等。
date 之类的函数如果返回是以小时或天级别的,最好先算出来再传进去。
select * from foo where date1=current_date -- 不会被 cache select * from foo where date1='2008-12-30' -- 被cache, 正确的做法
太大的result set不会被cache (< query_cache_limit)
MySQL缓存在分库分表环境下是不起作用的
执行SQL里有触发器,自定义函数时,MySQL缓存也是不起作用的
2.查询优化注意事项
(1)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
(2)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0
(3)应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。
(4)应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num=10 or num=20可以这样查询:select id from t where num=10 union all select id from t where num=20
(5)in和 not in 也要慎用,否则会导致全表扫描,如:select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了:select id from t where num between 1 and 3
关于“如何查询缓存在mysql中有哪些规则”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流