目录
前言
数据库篇内容是属于比较注重实战的技术,死记硬背是很难理解,推荐下丁奇大佬的《mysql45讲》,由浅入深,讲的非常好,虽然大佬犯事了,但是45讲真的经典。看看对数据库会有进一步的认识。
MySQL内容挺多,后续从索引,事务,锁,日志,性能优化方面具体归纳总结。
数据库基础
1.什么是关系型数据库和非关系型数据库?
关系型数据库(Relational Database)是一种基于关系模型(即表格模型)的数据库,其中数据以表格形式组织,每个表格包含了多行数据,每行数据又包含了多个属性(即列)。这些表格之间可以通过共同的字段建立关联,从而形成一个复杂的数据结构。关系型数据库通常使用SQL(Structured Query Language)来进行数据操作和查询。这些数据库通常支持ACID(Atomicity、Consistency、Isolation、Durability)事务,具有强一致性和数据完整性。
相对而言,非关系型数据库(NoSQL,Not Only SQL)则不遵循关系模型的原则,通常采用键-值存储、文档存储、列族存储等方式来存储和组织数据。非关系型数据库通常不使用SQL进行数据操作和查询,而是使用特定的查询语言或API。这些数据库通常具有高可伸缩性和高性能,但可能会牺牲一致性和数据完整性。
2.什么是 SQL?
SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准语言。
SQL语言包含一组命令和语句,可以用于创建、查询、更新和删除数据库中的数据。常见的SQL命令包括SELECT、INSERT、UPDATE和DELETE等,这些命令可以用于从数据库中检索数据、添加新数据、更新和删除现有数据等操作。
SQL语言具有以下特点:
- 结构化:SQL是一种结构化语言,其语法和格式非常规范,具有良好的可读性和可维护性。
- 简单易学:SQL的语法和语义非常简单,容易学习和理解,即使对编程没有经验的人也可以很快上手。
- 独立于数据库系统:SQL是一种标准化的语言,可以在各种不同的关系型数据库系统中使用,如MySQL、Oracle、SQL Server等。
- 支持事务处理:SQL支持事务处理和并发控制,可以保证数据的一致性和完整性。
3.MySQL 有什么优点?
- 可靠性:MySQL经过广泛测试和应用验证,具有高可靠性和稳定性,可以处理大量数据和并发请求。
- 高性能:MySQL具有快速的读写速度和高效的索引机制,可以快速执行复杂的查询和事务操作。
- 可扩展性:MySQL支持分布式部署和集群架构,可以快速扩展和水平扩展,适合大规模应用场景。
- 易用性:MySQL具有良好的可用性和易用性,提供了友好的图形化用户界面和命令行界面,同时支持多种编程语言的API接口,方便开发人员进行数据操作和管理。
- 开放源代码:MySQL是一种开放源代码的数据库管理系统,可以免费下载、使用和修改,同时具有强大的社区支持和广泛的开发者社区。
- 安全性:MySQL提供了各种安全措施和机制,如密码加密、访问控制、数据备份和恢复等,可以保证数据的安全和可靠性。
4.MySQL 的基础架构?
MySQL基础架构可以分为两个主要部分:Server层和存储引擎层。
1.Server层:
Server层是MySQL基础架构的上层部分,主要负责处理客户端连接、SQL解析、查询优化、缓存、事务管理、权限控制等功能。Server层包括以下组件:
- 连接器(Connection Manager):负责处理客户端连接请求,建立和管理客户端连接。当客户端发起连接请求时,连接器会验证连接权限、分配线程和连接资源,并返回连接结果给客户端。
- 查询缓存(Query Cache):MySQL支持查询缓存,可以将查询结果缓存在内存中,提高查询性能。查询缓存会在查询之前检查是否已经有相同的查询被缓存,如果已经缓存则直接返回结果。(MySQL 8.0 版本后移除,因为这个功能不太实用)。
- 分析器(Parser):负责解析客户端提交的SQL语句,进行语法检查和语义分析。分析器会检查SQL语句是否符合语法规范,如是否缺少关键字、是否拼写错误等。
- 优化器(Optimizer):负责对SQL语句进行优化,提高查询性能。优化器会对SQL语句进行重写、表连接顺序优化、索引选择等操作,以找到最优的查询执行计划。
- 执行器(Executor):负责执行SQL语句,并返回结果给客户端。执行器会根据优化器的执行计划,访问存储引擎层的数据,并进行数据操作和查询。
2.存储引擎层:
存储引擎层是MySQL基础架构的下层部分,主要负责数据的存储和检索。MySQL支持多种不同的存储引擎,每种存储引擎都有不同的特点和适用场景。
存储引擎
1.MySQL 支持哪些存储引擎?默认使用哪个?
MySQL 支持多种存储引擎,你可以通过 show engines 命令来查看 MySQL 支持的所有存储引擎。
- InnoDB:支持事务、行级锁定、外键约束、多版本并发控制(MVCC)等特性,是MySQL 5.5版本之后的默认存储引擎。
- MyISAM:不支持事务和行级锁定,但具有快速读取和写入的优点,适合用于数据仓库和读密集型应用。
- Memory:将数据存储在内存中,适合用于缓存和临时数据的存储。
- Archive:用于存储归档数据,具有高压缩比和快速插入的特点,但不支持索引和更新操作。
- CSV:将数据以逗号分隔的方式存储在CSV文件中,适合用于数据交换和数据导出。
- Blackhole:将写入的数据丢弃,但仍可以保留二进制日志,适合用于数据复制和备份。
- NDB Cluster:用于集群环境,支持分布式存储和高可用性。
默认情况下,MySQL 5.5版本及以后的版本使用InnoDB作为默认存储引擎。
2.MySQL 存储引擎架构了解吗?
MySQL存储引擎的插件式架构是其设计中的重要特点之一。该架构的基本思想是将数据存储和管理的功能从数据库服务器的核心代码中分离出来,作为独立的组件实现,并以插件的形式加载到MySQL服务器中。这样一来,用户可以根据自己的需求和场景选择不同的存储引擎,从而获得更好的性能和可靠性。并且,你还可以根据 MySQL 定义的存储引擎实现标准接口来编写一个属于自己的存储引擎。
另外,MySQL的存储引擎是基于表的,而不是基于数据库的。这意味着用户可以为不同的表选择不同的存储引擎,以满足不同表的不同需求。例如,对于高并发的 OLTP(联机事务处理)应用,可以选择使用InnoDB存储引擎来保证数据的一致性和事务的可靠性;而对于只读的数据仓库,可以选择使用MyISAM存储引擎来提高查询性能。
3.MyISAM 和 InnoDB 有什么区别?(重点)
MyISAM和InnoDB是MySQL中最常用的两种存储引擎,它们的差异主要体现在以下几个方面:
1.事务支持:MyISAM不支持事务,而InnoDB支持ACID事务,可以保证数据的一致性和可靠性。
2.锁机制:MyISAM使用表级锁,即在进行写操作时会锁定整个表,而InnoDB支持行级锁定和表级锁定,可以更好地支持并发操作。
3.索引结构:MyISAM使用B树索引,而InnoDB使用B+树索引,B+树索引支持范围查询和排序等操作效率更高。
4.缓存:MyISAM的缓存机制只有一级缓存,而InnoDB有多级缓存,包括查询缓存、InnoDB缓存池和操作系统缓存,能够更好地提高查询性能。
5.外键支持:MyISAM不支持外键,而InnoDB支持外键,可以保证数据的完整性和一致性。
6.数据和索引存储方式:MyISAM将数据和索引分别存储在不同的文件中,而InnoDB则将数据和索引保存在同一个文件中。
7.是否支持异常崩溃后恢复
MyISAM 不支持,而 InnoDB 支持。
使用 InnoDB 的数据库在异常崩溃后,数据库重新启动的时候会保证数据库恢复到崩溃前的状态。这个恢复的过程依赖于 redo log 。
8.性能差别:
InnoDB 的性能比 MyISAM 更强大,不管是在读写混合模式下还是只读模式下,随着 CPU 核数的增加,InnoDB 的读写能力呈线性增长。MyISAM 因为读写不能并发,它的处理能力跟核数没关系。
附一张图: