如何查询缓存在mysql中有哪些规则

这篇文章将为大家详细讲解有关如何查询缓存在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中有哪些规则”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

当前文章:如何查询缓存在mysql中有哪些规则
标题链接:https://www.cdcxhl.com/article48/ijogep.html

成都网站建设公司_创新互联,为您提供面包屑导航网页设计公司网站营销微信小程序品牌网站制作定制网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

绵阳服务器托管