2023-1-13
存储引擎简介
存储引擎就是存储数据,建立索引,更新/查询数据等技术的实现方式。
需要注意的是存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称为表类型
在MySQL 5.5.5版本开始默认的存储引擎是INNODB,在此之前的默认存储引擎是MyISAM
如何查看当前数据库支持的存储引擎:
基础语法
SHOW ENGINES ;
关键字解读:
Engine(存储引擎名称)
Support(是否支持该存储引擎)
Comment(存储引擎的描述)
Transcation(是否支持事务处理)
XA:存储引擎是否支持分布式事务
Savepoints(是否支持事务回滚)
指定存储引擎创建表
语法:
CREATE TABLE 表名(建表语句)ENGINE = 存储引擎名称;
# 创建表my_memory ,指定Memory存储引擎
CREATE TABLE my_memory(
id TINYINT UNSIGNED,
name VARCHAR(5)
)engine =Memory;
修改表的存储引擎
语法:
ALTER TABLE 表名 ENGINE =存储引擎名称;
ALTER TABLE my_memory ENGINE =INNODB;
文件
XXX.ibd:xxx代表的表名,innoDB引擎的每张表都会对应这样一个表空间文件,该文件存储该表的结构(frm,sdi),数据和索引。
Memory存储引擎(现在多用Redis进行缓存)
该引擎的表数据是存储在内存中,由于收到硬件问题,只能将表作为临时表或缓存使用,优点访问快,支持hash索引,文件xxx.sdi
Innodb
Innodb是一个将表中的数据存储到磁盘上的存储引擎,即关机后数据依然存在,支持事务,行锁和表锁,外键。
逻辑存储架构
Innodb引擎中主要拆分为五个部分(表空间,段,区,页,行)
1.表空间(tablespace):
表空间(idb文件),是一个mysql实例(对象)可以多个表空间,用于存储记录,索引等数据。
2.段(segment)
Innodb的读取原理
Innodb是采取一页一页的读取数据,一页默认读取16KB的数据!
索引
索引概述
索引(index)是帮助Mysql高效获取数据的(有序)数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构。
索引是在第三层(存储引擎层)实现,即不同的存储引擎有不同的索引结构
索引结构分类(四种)
- B+Tree索引(B+树)
也是最常见的索引类型,大部分索引都支持B+Tree.
2.Hash索引(哈希)
底层数据结构是用哈希表实现的,只有精准匹配索引列的查询才有效,不支持范围查询。
3.R-Tree(空间索引)
空间索引是MyISAM引擎的一种特殊索引类型,主要用于地理空间数据类型,通常用得较少。
4.Full-text(全文索引)
是一种通过建立倒排索引,快速匹配文档的方式。
索引的优缺点
优点
提高数据检索的效率,降低IO成本
通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗
缺点
索引作为一种数据结构会占用空间
索引大大提高了查询效率,同时也降低更新表的速度,比如DML语句(增,删,改)效率降低。
B+Tree索引
二叉树的缺点:顺序插入时,会形成一个单向链表,查询性能大大降低。在大数据量下,层级较深,索引速度较慢。
索引引出红黑树:在大数据量下,层级较深,查询速度慢
注意!由上述故引出我们所需要的B-Tree.
B-Tree(多路平衡查找树)
学前先知:什么是度数?
度数的概念:数的度数指的是一个节点的子节点个数
在B-Tree树中:
以一颗最大度数为5(5阶)的B-Tree为例(每个子节点最多存储4个Key,五个指针)
未完待续。。。。