MySQL
mysql包含server层(连接器,分析器,优化器,执行器)以及执行引擎。
连接器的作用:
判断是否有权限,是否通过
可能会存在长连接问题,什么是长连接?怎么解决?
建立连接: 通过TCP连接握手,连接器开始要求用户验证身份。
因为建立连接的过程比较复杂,所以我们一般会使用长连接。MySQL执行过程中使用的临时内存是建立在连接对象中的,只有连接断开才会被释放,严重的时候甚至会造成异常重启;
解决的方式就是,定时断开长连接
(Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该 connection。)
分析器的作用:
检查sql的语法是否存在问题
优化器的作用:
优化查询速度,选择使不使用索引,或者选择走哪个索引(会自动给索引排序)
执行器的作用:
查看用户是否有权限访问sql语句指定的数据库表
联合索引是什么?
最左匹配:
所谓的最左匹配就是当你的sql语句用到了联合索引中的最左边的索引,那么这条sql语句就会利用这条索引进行匹配,但是遇到范围查询的时候就会停止匹配(范围查询:>,<,between);
例如:and a = 1 and b=2 and c<3 and d=4;
截止到c使用了范围匹配,所以d不会执行索引;
InnoDB?
1,支持事务的ACID,具备提交,回滚和崩溃回复的能力。
2,支持行级锁,支持外键。
3,根据主键建立聚集索引,也就是说索引文件和数据文件存在一起。一般有两个文件,一个是建表文件,一个是数据+索引文件。一般来说,InnoDB是会将整张表,以主键建立B+ tree的数据结构,叶子节点存放全部数据。(其他B+tree的索引就不是都用叶子节点存放全部数据的了,而是寸的主键)
MyISAM
1,不支持事务。
2,不支持行锁,不支持表锁。
3,InnoDB不存储整个表的行数,执行select *会直接全局扫描。但是MyLSAM会存储整个表的行数,执行select *会非常快
4,非聚集性索引(数据文件和索引文件分开)