作者:乐天小散_608 | 来源:互联网 | 2020-12-01 12:52
mysql数据库查询缓存原理是:1、缓存SELECT操作的结果集和SQL语句,key为sql,value为查询结果集;2、如果新的SELECT语句到了,以这个sql为key去缓存中查询,如果匹配,就把缓存的结果集返回。
mysql数据库查询缓存原理是:1、缓存SELECT操作的结果集和SQL语句,key为sql,value为查询结果集;2、如果新的SELECT语句到了,以这个sql为key去缓存中查询,如果匹配,就把缓存的结果集返回。
可以看到相关参数:
开启查询缓存
设置选项query_cache_type = 1 ,同时设置query_cache_size = 67108864;
注:query_cache_size的值设置在100MB以内即可。在MySQL里查询缓存是由一个全局锁在控制,每次更新查询缓存的内存块都需要进行锁定。
关闭查询缓存
设置选项query_cache_type = 0,同时设置query_cache_size = 0。
适用场景
用于频繁提交同一个语句,并且该表数据变化不是很频繁的场景,例如一些静态页面,或者页面中的某块不经常发生变化的信息。
由于查询缓存需要缓存最新数据结果,因此表数据发生任何变化(insert、update、delete或其他可能产生数据变化的操作),都会导致查询缓存被刷新。因而,对于一个更新频率非常低而只读查询频率非常高的场景下,打开查询缓存还是比较有优势的。
不适用场景
查询缓存严格要求2次SQL请求要完全一样,包括SQL语句,连接的数据库、协议版本、字符集等因素都会影响。下面为查询缓存不适用的几个场景:
子查询;
过程、函数、触发器、event中调用的SQL,或者引用到这些结果的;
查询中涉及一些特殊函数时,例如:BENCHMARK()、CURDATE()、CURRENT_TIME()、CURRENT_TIMESTAMP()、NOW()、SLEEP()、CONNECTION_ID()、CURRENT_DATE()、CURRENT_USER()、PASSWORD()、RAND()、UUID()、ENCRYPT()、LAST_INSERT_ID()等等;
查询涉及到mysql,information_schema或performance_schema。
类似SELECT…LOCK IN SHARE MODE、SELECT…FOR UPDATE、SELECT..INTO OUTFILE/DUMPFILE、SELECT * FROM ... WHERE autoincrement_col IS NULL的查询;
SELECT执行计划用到临时表;
未引用任何表的查询,例如SELECT 1+2;
查询产生了告警(warnings);
SELECT语句中存在SQL_NO_CACHE关键字;
涉及到分区表。
更多相关免费学习推荐:mysql教程(视频)
以上就是mysql数据库查询缓存原理是什么的详细内容,更多请关注 第一PHP社区 其它相关文章!