我们在上篇文章中已经学习了MYSQL的基本语法和概念
在这篇文章中我们将讲解底层结构和一些新的语法帮助你更好的运用MYSQL
温馨提醒:该文章大约20000字,建议关注收藏慢慢观看,希望能给你带来帮助~
进阶篇内容目录这篇文章我们主要分为七个部分:
存储引擎索引SQL优化视图/存储过程/触发器锁InnoDB引擎MYSQL管理存储引擎在讲解存储引擎前我们先来了解一下MYSQL的整体体系结构
MYSQL整体分为四个部分:
连接层服务层引擎层存储层存储引擎简介存储引擎概念:
存储数据,建立索引,更新/查询数据等技术的实现方式存储引擎注意点:
存储引擎是基于表的,而不是基于库的,所以不同表可以有不同的存储引擎,同时存储引擎也被称为表类型首先我们要先直到存储引擎是在哪里定义的:
# 下面是一个表的创建语句create table Name (~~~~~~~~)engine = InnoDB;# 在上面的engine = 存储引擎类型 就是存储引擎的设计语句# 我们默认情况下是InoDB存储引擎同样我们可以通过查看创建方法来得到表的存储引擎类型:
show create table 表名;存储引擎类型以及特点我们可以在DG或其他数据库软件中直接查看存储引擎的类型:
# 下述代码会给出该数据库中支持的存储引擎类型show engines;在这里我们仅详细介绍三种存储引擎:
InnoDB介绍:
InnoDB是一种兼顾可靠性和高性能的通用存储引擎,在MYSQL5.5之后,称为MYSQL默认存储引擎特点:
DML操作遵循ACID模型,支持事务行级锁,提高并发访问性能支持 外键 FOREIGN KEY约束,保证数据的完整性和正确性文件:
xxx.ibd:xxx表示表名,innoDB引擎的每张表对应一个表空间文件,存储该表的表结构,数据和索引我们可以通过show variables like ‘innodb_file_per_table‘来查看查看存储引擎分类情况(是否共用一个存储引擎)如果为ON表示一个表分配一个ibd文件MyISAM介绍:
MyISAM是MYSQL早期的默认存储引擎特点:
不支持事务,不支持外键支持表锁,不支持行锁访问速度快文件:
xxx.sdi:存储表结构信息xxx.MYD:存储数据xxx.MYI:存储索引Memory介绍:
Memory引擎的表数据是存储在内存中的,由于受到硬件问题或断电问题,只能作为临时表或缓存使用特点:
内存存放hash索引(默认)文件:
xxx.sdi:存储表结构信息三者区别:
特点InnoDBMyISAMMemory存储限制64TB有有事务安全支持--锁机制行锁表锁表锁B+tree索引支持支持支持Hash索引--支持全文索引支持(5.6版本)支持-空间使用高低N/A内存使用高低中等批量插入速度低高高支持外键支持--存储引擎选择我们在各个表都可以选择不同的存储引擎,而存储引擎的选择大多遵循以下特征:
优选InnoDB:
MYSQL的默认存储引擎,支持事务,外键如果应用对事务的完整性有较高要求,并在并发条件下要求数据的一致性,数据操作除了插入和查询外,还包括很多的更新和删除操作,那么InnoDB存储引擎是比较合理的选择优选MyISAM:
如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并对事务的完整性,并发性要求不高,那么MyISAM存储引擎是比较合理的选择优选Memory:
将所有数据保存到内存中,访问速度快,常用于临时表和缓存Memory的缺陷是对表的大小有限制,太大的表无法存储在内存中,且无法保证安全性索引首先我们来简略的介绍一下索引:
索引是帮助MYSQL高效获得数据的数据结构(有序)在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方法引用数据,实现查找索引的优点:
提高数据检索的效率,降低数据库的IO成本通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。索引的缺点:
索引列也是要占用空间的。索引大大提高了查询效率,同时却也降低更新表的速度, 如对表进行INSERT、UPDATE、DELETE时,效率降低。索引结构MySQL的索引是在存储引擎层实现的,因而不同的存储引擎有不同的索引结构 :
索引结构描述B+Tree索引最常见的索引类型,大部分引擎都支持 B+ 树索引Hash索引底层数据结构是用哈希表实现的, 只有精确匹配索引列的查询才有效, 不 支持范围查询R-tree索引空间索引是MyISAM引擎的一个特殊索引类型,主要用于地理空间数据类 型,通常使用较少Full-text索引是一种通过建立倒排索引,快速匹配文档的方式。类似于 Lucene,Solr,ES不同的索引结构也有不同的适配情况:
索引InnoDBMyISAMMemoryB+Tree索引√√√Hash索引××√R-tree索引×√×Full-text索引√√×在这里我们仅对B+Tree索引和Hash索引做出详细解释:
B+Tree索引以一颗最大度数为4的B+Tree结构为例:
图片内容解释:
绿色框框起来的部分,是索引部分,仅仅起到索引数据的作用,不存储数据。红色框框起来的部分,是数据存储部分,在其叶子节点中要存储具体的数据。注意:
上面节点仅用于快速定位数据位置,且所有的数据元素均会出现在叶节点叶节点之间用单项