一、数据库基础
(一)什么是关系型数据库?
关系型数据库是基于关系模型(表结构)的数据库,数据以行和列的形式存储在表中。每个表都有一个唯一的标识符(主键),表与表之间通过外键建立关联。
基础点
- 表(Table):数据的集合,由行和列组成。
- 行(Row):表中的一条记录。
- 列(Column):表中的字段,表示数据的属性。
- 主键(Primary Key):唯一标识一条记录的字段。
- 外键(Foreign Key):用于建立表与表之间的关联(不推荐使用外键)。
常见关系型数据库有MySQL、PostgreSQL、Oracle、SQL Server等。
(二)MySQL的基本架构
MySQL的架构可以分为三层:
- 连接层:负责客户端与服务器的连接管理。
- SQL层:负责SQL语句的解析、优化和执行。
- 存储引擎层:负责数据的存储和检索。
(三)SQL语句分类
- DDL(数据定义语言):用于定义或修改数据库结构,如CREATE、ALTER、DROP。
- DML(数据操作语言):用于操作数据,如INSERT、UPDATE、DELETE。
- DQL(数据查询语言):用于查询数据,如SELECT。
- DCL(数据控制语言):用于控制数据库权限,如GRANT、REVOKE。
(四)事务与ACID特性
事务是数据库操作的基本单位,具有以下四个特性(ACID):
- 原子性(Atomicity):事务要么全部成功,要么全部失败。
- 一致性(Consistency):事务前后数据状态一致。
- 隔离性(Isolation):事务之间相互隔离。
- 持久性(Durability):事务提交后数据永久保存。
二、数据存储引擎
(一)什么是存储引擎?
存储引擎是MySQL中负责数据的存储和检索的组件。不同的存储引擎有不同的特点和适用场景。
(二)InnoDB vs MyISAM
-
InnoDB:
- 支持事务、外键。
- 行级锁,适合高并发场景。
- 默认存储引擎(MySQL 5.5+)。
-
MyISAM:
- 不支持事务、外键。
- 表级锁,适合读多写少场景。
- 支持全文索引。
(三)为什么选择InnoDB?
InnoDB成为MySQL默认存储引擎的原因:
- 事务支持:InnoDB支持ACID事务,适合需要保证数据一致性的场景。
- 行级锁:InnoDB使用行级锁,减少了锁冲突,提高了并发性能。
- 外键约束:InnoDB支持外键,保证了数据的完整性。
- 崩溃恢复:InnoDB具有强大的崩溃恢复能力,确保数据安全。
三、数据库索引的规则
(一)什么是索引?
索引是加速数据检索的数据结构,类似于书的目录。通过索引,MySQL可以快速定位到目标数据,而不需要扫描整个表。
(二)索引的类型
- 主键索引(PRIMARY KEY):唯一且非空。
- 唯一索引(UNIQUE KEY):唯一但可为空。
- 普通索引(INDEX):加速查询。
- 全文索引(FULLTEXT):用于全文搜索。
(三)为什么选择B+树作为索引结构?
B+树是MySQL默认的索引结构,原因如下:
- 平衡树结构:B+树是一种平衡树,保证了查询效率的稳定性。
- 适合范围查询:B+树的叶子节点通过指针连接,适合范围查询。
- 磁盘I/O优化:B+树的节点大小通常与磁盘页大小一致,减少了磁盘I/O次数。
- 支持高并发:B+树的读写操作效率高,适合高并发场景。
- 简单的来说B+树三层就能存下百万级别的数据
(四)索引的使用规则
-
最左前缀原则:联合索引中,从左到右匹配。
-
索引覆盖:查询字段全部在索引中,避免回表。
-
索引失效的场景:
- 使用!=、NOT IN。
- 对索引列进行函数操作。
四、总结
MySQL是Java开发中最常用的关系型数据库之一。InnoDB因其事务支持、行级锁和外键约束成为默认存储引擎。B+树因其平衡性、范围查询优化和磁盘I/O优化成为索引的首选数据结构。在实际开发中,合理使用索引和连接池可以显著提升性能