一,连接层功能:
1,TCP/IP或者Socket的链接方式
2,验证用户名密码功能
3,连接线程(客服):接收SQL语句,返回执行结果
二,SQL层
1,语法检查模块,检查上层发过来的SQL语句,进行语法检查
2,权限检查模块,检测当前登录用户是否有权限操作数据库对象
3,语义检查模块,识别语句种类
5,优化器,基于执行代价(系统资源的消耗作为维度(cpu、内存、IO),管理员可以通过间接的方法,干扰优化器的选择)
6,执行器,按照优化器选择的“最优”的执行计划,执行SQL语句。得出结论:某某磁盘的某某位置,发送给存储引擎层。
7,提供查询缓存:有局限性。一般会用Redis产品来替代
8,记录查询日志
三,存储引擎层:
和“磁盘”(文件系统)打交道的层次
根据SQL层执行的结果,去磁盘上找到对应的数据。结构化成表的模式,返回给用户。
SQL语句的分类:
DDL:数据定义语言
DCL:数据控制语言
DML:数据操作语言
DQL:数据查询语言
MySql逻辑结构组成:
一,库(库名字,库属性)
二,表(表名字,列(列名字,列属性),表属性,表数据)
MySQL索引分类
存储引擎管理
一,索引管理以及原理
1,索引的种类
B树(B+tree B*tree b-tree)
B-tree:针对某个明确值的查询
查找顺序:根节点——>枝节点——>叶子节点
B+tree:针对明确的范围的查询
缺点:无法同时包含回表查询以及其它列的查询
辅助索引:(B TREE)
alter table t1 add index idx_num(telnum);
怎么生成的:
根据创建索引时,指定的列的值,进行排序后,存储在叶子节点中
优点:
1,优化了查询,减少CPU 内存 IO消耗
2,减少了文件排序
覆盖索引:(联合索引)
通过一个索引列把需要查询的列都添加到索引树里面去
直接在索引树里面直接有,减少或尽量避免回表查询操作
优点:减少回表查询的操作的几率
聚集索引 :
同一等级情况下效率最高
大部分情况下辅助索引和聚集索引结合使用
辅助索引:where 条件 有id列的时候,比如id=28
随机读? 顺序读
建表时,如果有主键列,自动生成聚集索引
没有主键列,会去找unique列
优点:
减少回表查询
将随机IO转换成顺序IO
加强了缓存的应用,查询效率提升
2,R树
3,hash索引
4,全文索引
2,B树索引的类型
1,聚簇索引(cluster index):一般是基于主键的
2,辅助索引(普通辅助索引:回表查询;覆盖索引;不回表查询;唯一性索引)
3,唯一索引
3,索引管理
索引的作用:在mysql数据库中,索引是用来优化查询的
除缓存之外,数据的查询有两种方式:
1,全表扫描
2,索引扫描
优化器索引扫描要优于全表扫描
索引管理:
索引就是一张表
创建索引的语句:
为某张表基于某列建索引:alter table 表名 add index idx_name(列名)
MySQL不走索引的情况:
1,where语句后有算数计算
2,where语句后跟函数
3,查询语句中包含<>,link
MySQL存储引擎:
查看存储引擎:
show engines;
show create table world.city;
插件式,即插即用存储引擎,是在表级别设定的。
mysql5.5以后默认的是InnoDB
InnoDB与MyISAM存储引擎的区别:
MVCC: innoDB支持,MyISAM不支持
锁(行级别): innodb支持,myisam表级别
外键: innodb支持,myisam不支持
事务: innodb支持,myisam不支持
热备份: innodb支持,myisam温备份
CSR(故障断电自动恢复)innodb支持,myisam不支持
InnoDB
MVCC
事务
锁定粒度
外键
MyISAM
MEMORY(memory)
ARCHIVE(archive)
也可以使用第三方的存储引擎
TokuDB ------>zabbix
myrocks
InnoDB存储引擎的物理存储方式:
表空间(TBS)的管理模式:
来自于Oracle
表存储到磁盘上是以表空间的管理模式来存储
共享表空间:类似于Oracle管理模式
独立表空间:每个表单独使用表空间存储
5.5默认:共享表空间
5.6以后:默认管理模式独立表空间存储,共享表空间也存在
表空间存储数据的分类:
共享表空间:ibdata1
存了什么?
系统数据
undo日志
磁盘临时表
独立表空间:
t1.ibd ----->t1表的数据和索引
t1.frm ------>t1表的列相关信息
表空间操作:
共享表空间:
我们建议,在数据库初始化的时候就配置好
一般建议2-3个,512M
/etc/my.cnf
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
mysql_install_db
独立表空间:一个表一个ibd文件,存储表数据和索引
show variables like ‘innodb_file_per_table‘;
日志管理
备份恢复
主从复制
高可用以及读写分离
分布式系统
优化:
搜索引擎优化
SQL语句优化
原文:https://www.cnblogs.com/Rglin/p/11280867.html