MySQL学习

Mysql构成:server 层和存储引擎两部分

        (1)Server 层:连接器,查询缓存,分析器,优化器,执行器

        (2)存储引擎:  innodb, menmory(使用内存引擎创建表), myisam

存储引擎

        存储引擎主要是插件式的,主要用于数据的存储和提取。因此可能一个server层对应多个存储引擎。

        在创建表时默认使用的存储引擎innodb,也可以使用engine=存储引擎指定特定的存储引擎存储数据。

Server 层:

连接器

        与客户端建立连接,获取登录用户的权限

        与MySQL获取连接的命令: mysql  -h ip地址  -p  端口号(默认3306)  -u  用户名   -p  密码用户名密码不对时:access denied for  user 

认证通过:  从权限表中查询出用户的权限,此后连接里面的权限逻辑判断依赖于此时查询出的权限。

        查看连接状态: show  procelist

显示与数据建立的各个连接的状态,如果一个连接的command列是sleep状态,说明此连接是空闲状态的。客户端连接长时间处于空闲状态,连接器会字段将其断开(等待时间通过参数 wait_timeout确定的)

 数据库长连接:用户与数据库建立连接后,客户端持续有请求,则一直使用同一个连接

(因为数据库连接建立是十分复杂的,需要减少建立连接的动作,需要使用长连接)

短连接:每次只执行几句简单的查询就断开连接,下次查询需要重新建立一个连接。

(注:使用长连接时,发现MySQL占用内存长得特别快,因为MySQL执行时使用的临时空间是建立在连接对象里面的,长期累计会导致内存占用过大oom,

解决方法: 1 执行数据量大的操作后,断开连接

2 .MySQL 5.7 版本后 执行mysql_reset_connection 重新初始化连接资源)

缓存查询

       MySQL8后没有查询缓存

        建立连接后,可以执行查询逻辑,首先会执行查询缓存操作,MySQL拿到一个查询请求后,会先到查询缓存中查看是否执行过这个查询请求,执行结果以key-value格式存储,如果查询不到缓存,继续执行下面的查询操作。

(查询缓存:不建议使用,因为查询缓存失效特别频繁,当对表进行更新操作时,所有缓存都会被清空,因此查询的命中率会比较低

使用查询缓存可以使用按需缓存,设置参数query_cache_type = cemand 对于需要缓存的数据可以进行命令行显式指定:

mysql> select SQL_CACHE * from T where ID=10)

分析器

对输入的sql语句进行分析

1.取出操作的关键词select  判断操作,取出表名,列名,

2.进行语法分析判断sql 是否符合mysql语法规范

优化器

判断查询中使用哪个索引,在多表关联时,判断各个表的连接顺序

执行器

 执行本次数据库操作

执行前,首先判断用户是否有对这个表的操作权限,(查询缓存后,返回结果前也会对权限进行判断),对数据逐行进行判断,在查询日志中rows_examined字段记录查询操作扫描了多少行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值