1、mysql体系结构
2、MySQL存储引擎的特点
MySQL在5.5之前默认用的是myISAM ,5.5以后用的是InnoDB
MyISM: 不支持外键、事务、行锁,只支持表锁。文件:xxx.fri表结构 xxx.MYI 表索引 xxx.MYD表数据
InnoDB: 支持外键、事务、行锁、表锁,使用的是b+树索引 文件:xxx.ibd 每张表都对应一个表空间,存储数组、索引、表结构。
Memory: 默认使用Hash索引,引擎的数据存储在内存中,读写快,但是会受到硬件、断电影响,因此只能将这些表做缓存或临时用。
区别和特点:
引擎的选择:
InnoDB: 是mysql默认引擎,如果对事物的完整性要求比较高,在并发条件下要求数据的一致性,数据操作除了插入和查询外,还包含很多的更新删除操作,选择这
MyISAM:如果以读和写操作为主,对数据完整性、并发性要求不高
Memory:访问速度快,用于临时表和缓存。而且对表的大小有限制。
3、索引
索引是一种 帮助mysql快速查找数据的数据结构。mysql的索引是引擎层实现的,因此不同的存储引擎有不同的索引结构。
各种索引:
B+索引:最常见的索引,大部分都支持。
Hash索引:Memory存储引擎支持,InnoDB不支持,但是有自适应hash.。底层是哈希表,只有精确匹配索引列才有效果。
R-tree索引: 空间索引,是myISAM的一种特殊索引类型,用于地理空间数据类型
为什么选择B+树?
索引选择上有二叉树、B-tree、B+tree Hash。
二叉树,如果是顺序插入,会造成单链表,就是我们的单脚,大数据量层级较深,查询效率慢。
红黑树:又名平衡二叉树,会通过左旋右旋维持平衡,单脚效应没有了,但是会只有两叉,大数据量下,层级还是深,查找数据慢。
B-tree:又名多叉路查找树,对比比二叉树,每个节点有多个叉,以一个5阶(度)树为例,每个加点有4个键以及5个指针。但同时,每个节点会存在数据,造成每个节点上的指针存储不多,并且,排序数据的时候会是波浪形,效率慢。
B+树:是B树的变种
B树与B+树的对比:
1、B+树所有的数据都在叶子节点上
2、叶与叶之间用单项链表相连
3、非叶子节点仅仅起到索引数据的作用,具体的数据都在叶子上。
索引的分类:
1、主键索引: 有且仅有一个,自动创建 针对于主键,关键字 primary;
2、唯一索引:可以有多个,避免列的值重复,关键字unique
3、普通索引: 可以有多个,用于检索
4、全文索引:可以多个,用于查找关键 词,关键字fulltext
聚集索引&二级索引:
在innoDB按索引的存储形式又分聚集和二级。
聚集索引:数据和索引存在一起,索引结构中的叶子节点存储的是数据,表中必须有且只有一个。
二级索引:数据和索引分开存储,叶子节点存储的是主键,表中可以没有。
聚集索引的选取规则:
1、如果存在主键,则主键索引就是聚集索引
2、不存在主键,则第一个唯一索引就是聚集索引
3、不存在唯一索引,则InnoDB会根据隐藏字段ROW_ID生成聚集索引
索引语法:
1、创建索引: create [unique | fulltext] index index_name on table_name (index_col_name+
2、查看索引:show index from table_name;
3、删除索引: drop index index_name on table_name;