一、存储引擎
(一)、MySQL体系结构
连接层:主要负责客户端和服务器之间的连接处理、授权认证以及相关的安全方案。服务器会为每个安全接入的客户端验证其所具有的操作权限。
服务层:实现大多数的核心服务功能,如SQL接口,完成缓存的查询、SQL的分析和优化,以及部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如过程、函数等
存储引擎层:真正负责MySQL中数据的存储和提取。服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,用户可以根据自己的需要选择合适的存储引擎。MySQL支持多种存储引擎,如MyISAM和InnoDB,它们各有特点,满足不同的应用需求。
系统文件层:负责将数据库的数据和日志存储在文件系统之上,完成与存储引擎的交互。这一层包括日志文件、数据文件、配置文件等,其中日志文件记录了数据库的更改操作和其他重要信息,对于数据库的恢复和复制非常重要。
查询缓存层(如果启用):如果查询缓存有命中的查询结果,查询语句可以直接从查询缓存中获取数据,提高查询效率。
(二)、什么是存储引擎
数据库中的存储引擎是数据库管理系统(DBMS)中负责执行数据存储、检索和管理操作的软件组件。它们各自有不同的特点和适用场景。常见的存储引擎包括MyISAM、InnoDB、Memory、Archive等。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。
存储引擎是基于表的,而不是基于库的,所以存储引擎也可以称为表类型。
常见存储引擎对比分析:
特点 | InnoDB | MyISAM | Memory |
存储限制 | 64TB | 有 | 有 |
事务安全 | 支持 | - | - |
锁机制 | 行锁 | 表锁 | 表锁 |
B+Tree索引 | 支持 | 支持 | 支持 |
hash索引 | -- | -- | 支持 |
全文索引 | 5.6版本 之后支持 |
支持 | -- |
空间使用 | 高 | 低 | N/A/ |
内存使用 | 高 | 低 | 中等 |
批量插入速度 | 低 | 高 | 高 |
支持外键 | 支持 | -- | -- |
(三)、存储引擎的选择
选择数据库存储引擎时,应根据具体的应用场景和需求来决定。如果应用需要高并发、事务支持和数据一致性,InnoDB是一个很好的选择。如果应用主要是读密集型且对事务完整性要求不高,MyISAM可能更适合。对于需要高速处理但数据安全性要求不高的场景,可以考虑使用MEMORY存储引擎。而对于特定的非结构化数据存储或高速缓存需求,MongoDB和Redis可能是更好的选择。
(四)、查看当前数据库支持的存储引擎情况
我当前为MySQL:
show engines;
创建表的时候指定存储引擎,首先创建两张表并且指定存储引擎
create table test(id int ,name varchar(10))engine=innodb;
create table test1(id int,name varchar(10))engine=memory;
然后查看表状态,发现存储引擎已经被指定了:
二、索引
(一)索引的概述
索引是数据库中一种重要的数据结构,用于加快数据的检索速度。它相当于图书的目录,允许数据