这篇文章主要介绍在mysql中查询缓存的注意事项,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
查询优化注意事项
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0
应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。
应尽量避免在 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
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 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 -- 不会被 cacheselect * from foo where date1='2008-12-30' -- 被cache, 正确的做法
太大的result set不会被cache (< query_cache_limit)
MySQL缓存在分库分表环境下是不起作用的
执行SQL里有触发器,自定义函数时,MySQL缓存也是不起作用的
在进入一个登录的页面时,我们的用户信息就会被软件后台记录,那么下次打开网站就能直接默认用户登录了。我们在mysql查询缓存中也有这样的使用,已经被查询的语句会放在内存,再次查询就可以直接使用。
以上是“在mysql中查询缓存的注意事项”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!