数据库-八股文

发布时间 2023-07-07 22:50:20作者: 356a
  1. 索引的基本原理-√
  2. 1.索引对应列进行排序
    2.将排序结果建立倒排表
    3.将数据地址链拼接到倒排表上
    4.查询的时候,拿到倒排表,查询到数据地址链,最后取到需要的数据
    
  3. 索引的设计原则
  4. 1.类型不多的列没必要建索引,占空间,效果还不好
    2.由于索引也是要占空间的,而且索引建立完毕以后,之后的写入操作都需要更新索引,因此,索引越多对写入操作越不友好,索引的数量要控制
    3.索引建立的列,不能是全模糊和前模糊查询的那种情况[全模糊与前模糊都不走索引],尽量建立在精确匹配的场景
    4.索引建立的列,尽量不要建立在text类型上
    
  5. 事务的基本特性和隔离级别-※
  6. 基本特性
    ACID: atom consistent isolation duration
    原子性:每个事务的执行应当是原子性的,要么都执行,要么都不执行
    一致性:数据库总是从一致性的状态变化到另外一种一致性的状态,所有数据应当具有一致的状态,不存在矛盾;即无论何时,数据都应当满足本身的约束条件    
    隔离性:事务之间应当是隔离的,不会互相影响
    持久性:事务一旦提交,就持久化到数据库里面了
    
    隔离级别
    1.读未提交 脏读,一个事务A没有执行完,另一个事务B读到了A的中间处理结果
    2.读已提交 不可重复读,一个事务A没有执行完,事务B读到的数据为C,事务A执行完毕,事务B读到的数据为D
    3.可重复读 ,利用多版本并发控制,事务A写操作的数据版本与事务B读操作的数据版本不一致,从而保证两个事务读写操作是独立的
    4.串行,每个操作都加锁,保证串行执行,但效率很低,一般不用
    
  7. 什么是MVCC
  8. MVCC multi version concurrent control 多版本并发控制
    
    简而言之就是 每个数据都有若干版本,读写分离,操作的是不同版本的数据
    
    读已提交:每次读 都生成一个readView
    可重复读:每次读都复用同一个readView
    
  9. 简述MyISAM和InnoDB的区别-※
  10. Explain语句中各个字段分别表示什么?-※
  11. 索引覆盖是什么?
  12. 查询索引的时候,所有目标结果列就已经包含在索引里面了,因此,就没有必要再去查找原表了,从而提高了查询效率
    
  13. 最左前缀原则是什么?-※
  14. 查询SQL的时候,如果利用到了联合索引,那么使用的顺序与建立索引的顺序必须保持一致
    
  15. InnoDB是如何实现事务的?-※
  16. B树和B+树的区别?为什么Mysql使用B+树?-※
  17. Mysql的锁有哪些?如何理解?-√
  18. 1.共享锁 排他锁
    共享锁:其他线程可以读 但是不能写,也不能加排他锁,可以加共享锁
    排他锁:其他线程不可读不可写,也不能继续加锁
    
    2.行锁 表锁
    行锁:锁定一行
    表锁:锁定一张表
    
    3.乐观锁、悲观锁
    乐观锁:不是真正上锁 而是通过数据多版本控制的方式实现上锁,乐观认为 自己上锁以后 不会有其他线程同时访问修改该数据,最后判断一下上锁的版本号是不是最新的版本,如果不是最新版本就放弃操作
    悲观锁:例如行锁、表锁