简介
详细教程资料关注+后台私信;资料;两个字可以免费视频学习资料(包含视频、技术学习路线图谱、文档等)
MySQL是一个 关系型数据库 管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL下载与安装
一、下载
- 地址:
- 当前最新是8.0版本,我选择上一个最新的mysql-5.7.24-winx64.zip
详细教程资料关注+后台私信;资料;两个字可以免费视频学习资料(包含视频、技术学习路线图谱、文档等)
二、安装
MySQL安装文件分两种 .msi和.zip ,.msi需要安装
zip格式是自己解压,解压缩之后其实MySQL就可以使用了,但是要进行环境变量配置zip格式是自己解压
我的电脑->属性->高级->环境变量
选择Path,在其后面添加: 你的mysql bin文件夹的路径 :
F:\mysql\mysql-5.7.24-winx64\mysql-5.7.24-winx64\bin;
配置完环境变量之后,在F:\mysql\mysql-5.7.24-winx64\mysql-5.7.24-winx64目录下新增加一个配置文件mysql.ini ,同时在bin的同级目录下创建一个data文件夹(用于存放数据库数据)
mysql.ini文件的内容如下
mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=F:\mysql\mysql-5.7.24-winx64\mysql-5.7.24-winx64
# 设置mysql数据库的数据的存放目录
datadir=F:\mysql\mysql-5.7.24-winx64\mysql-5.7.24-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
详细教程资料关注+后台私信;资料;两个字可以免费视频学习资料(包含视频、技术学习路线图谱、文档等)
一、MySQL缓存规则
1.开启了缓存,MySQL Server会自动将查询语句和结果集返回到内存,下次再查直接从内存中取;
2.缓存的结果是通过sessions共享的,所以一个client查询的缓存结果,另一个client也可以使用。
3.MySQL Query Cache内容为 select 的结果集, cache 使用完整的SQL字符串做 key, 并区分大小写,空格等。即两个SQL必须完全一致才会导致cache命中。即检查查询缓存时,MySQL Server不会对SQL做任何处理,它精确的使用客户端传来的查询,只要字符大小写或注释有点不同,查询缓存就认为是不同的查询;
4.prepared statement永远不会cache到结果,即使参数完全一样。在 5.1 之后会得到改善。
5.where条件中如包含任何一个不确定的函数将永远不会被cache, 比如current_date, now等。
6.date 之类的函数如果返回是以小时或天级别的,最好先算出来再传进去。
select * from foo where date1=current_date — 不会被 cache
select * from foo where date1=’2008-12-30′ — 被cache, 正确的做法
7.太大的result set不会被cache (< query_cache_limit)
8.MySQL缓存在分库分表环境下是不起作用的
9.执行SQL里有触发器,自定义函数时,MySQL缓存也是不起作用的
二、缓存失效
详细教程资料关注+后台私信;资料;两个字可以免费视频学习资料(包含视频、技术学习路线图谱、文档等)
在表的结构或数据发生改变时,查询缓存中的数据不再有效。如INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE会导致缓存数据失效。所以查询缓存适合有大量相同查询的应用,不适合有大量数据更新的应用。
一旦表数据进行任何一行的修改,基于该表相关cache立即全部失效。
手动清理缓存
手动清理缓存可以使用下面三个SQL
1.FLUSH QUERY CACHE; #清理查询缓存内存碎片
2.RESET QUERY CACHE;#从查询缓存中移除所有查询
3.FLUSH TABLES; #关闭所有打开的表,同时该操作会清空查询缓存中的内容
四、缓存机制中的内存管理
MySQL Query Cache 使用内存池技术,自己管理内存释放和分配,而不是通过操作系统。内存池使用的基本单位是变长的block, 用来存储类型、大小、数据等信息;一个result set的cache通过链表把这些block串起来。block最短长度为query_cache_min_res_unit。
当服务器启动的时候,会初始化缓存需要的内存,是一个完整的空闲块。当查询结果需要缓存的时候,先从空闲块中申请一个数据块为参数query_cache_min_res_unit配置的空间,即使缓存数据很小,申请数据块也是这个,因为查询开始返回结果的时候就分配空间,此时无法预知结果多大。
分配内存块需要先锁住空间块,所以操作很慢,MySQL会尽量避免这个操作,选择尽可能小的内存块,如果不够,继续申请,如果存储完时有空余则释放多余的。
但是如果并发的操作,余下的需要回收的空间很小,小于query_cache_min_res_unit,不能再次被使用,就会产生碎片。
MySQL缓存机制从某种程度上来说,和其他的系统缓存有类似的作用:提高系统的性能,释放系统的内存空间。但MySQL缓存机制又有着其独特的特性,对于数据重复性比较高的查询有着显著的作用。想要学习更多的MySQL知识,敬请期待本站的MySQL教程,名师讲解,各种知识点一目了然。
总结;
相关资源:mysql缓冲和缓存设置详解_mysql缓存设置,mysql缓存配置-其它代码..
详细教程资料关注+后台私信;资料;两个字可以免费视频学习资料(包含视频、技术学习路线图谱、文档等)
内容包括:C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,嵌入式 等。