数据库原理
面试 4

数据库

事务

事务 是数据库管理系统执行过程中的一个逻辑工作单元,它由一组SQL操作组成,这些操作要么全部成功执行(提交),要么全部不执行(回滚),以确保数据库的一致性和完整性。

事务的四大特性AICD:

  • 原子性:一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败回滚
  • 一致性:从一个一致状态转变为另一个一致状态
  • 隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行
  • 持久性:事务一旦提交,其对数据库的修改就是永久性的

事务需要并发控制,锁机制:共享锁/排他锁

MySQL的事务如何实现

索引

索引是数据库系统中一种特殊的数据结构,它类似于书籍的目录,能够快速定位到表中特定数据的位置,而不必扫描整个表。高频查询的列(特别是WHERE / JOIN / ORDERED BY / GROUP BY)适合简历索引

  1. 有利于排序/分组:索引有序,避免额外排序
  2. 有利于表连接:加速匹配关联列,减少全表扫描
  3. 保证数据唯一性:强制唯一性约束

索引的底层实现:

  1. B+树:多路平衡,查找、插入、删除的时间复杂度都是O(log n)
  2. 哈希:查找的时间复杂度为O(1),如何处理hash冲突(开放寻址法/链表)
  3. LSM树:适合写多读少(适合时序数据库),分层存储,可以先写入内存,再异步刷入磁盘,查询优化(比如先查询内存,在查询磁盘)

聚簇索引和非聚簇索引的区别

聚簇索引(有且只能有一个),数据按索引键排序存储,如果定义了主键,主键就是聚簇索引

范围查询高效:由于数据按索引顺序存储,范围查询(如BETWEEN, >, <)性能优异

排序高效:查询结果自然有序,无需额外排序,减少IO:数据与索引存储在一起,减少回表操作

非聚簇索引:适合频繁查询但不常更新的列:如状态、类型等,每个表可以有多个

不影响数据物理顺序:可以创建多个不影响数据存储的索引,如果查询所需字段都在索引中,可直接从索引获取数据

缓存雪崩、击穿、穿透

数据库的数据是落在磁盘上的,磁盘的读写速度很慢

当用户的请求,都访问数据库的话,请求数量一上来,数据库很容易就奔溃

引入了缓存层,就会有缓存异常的三个问题,分别是缓存雪崩、缓存击穿、缓存穿透

缓存雪崩:大量缓存同时过期,或者缓存故障了,就需要访问数据库,数据库压力增大

缓存击穿:某个热点数据过期,大量请求访问这个热点数据,只能从数据库中读取

这两者都是不在缓存中,在数据库中

缓存穿透是既不在缓存中,又不在数据库中

数据库原理
https://lihuigu.cn//archives/shu-ju-ku-yuan-li
作者
lihuigu
发布于
更新于
许可协议