资讯动态

数据库-八股

发布时间:2026/8/8 22:42:09 来源:尧图企业网站定制
文章目录索引事务一条SQL查询语句是如何执行的事务的四大特性有哪些数据库的事务隔离级别有哪些MySQL为什么使用B树来作索引说一下索引失效的场景什么是慢查询原因是什么可以怎么优化undo log、redo log、binlog 有什么用MySQL和Redis的区别是什么Redis有什么优缺点为什么用Redis查询会比较快Redis的数据类型有哪些Redis是单线程的还是多线程的为什么说一说Redis持久化机制有哪些介绍一下Redis缓存雪崩和缓存穿透如何解决这些问题如何保证数据库和缓存的一致性索引索引是什么数据库引入索引,索引就像是书的目录, 是为了加快数据库的查询速度索引付出的代价索引会增加额外的存储空间索引会提高查询的速度, 但可能会减慢增,删,改的速度索引背后的数据结构索引就是查找, 可以是二叉搜索树, 哈希表二叉搜索树, 当内容多时, 树会过高, 比较次数变多, 减慢速度哈希表, 查找很快, 但是无法查找范围,B树的特点和优势[35, 70, 100] / | \ / | \ / | \ / | \ / | \ / | \ / | \ [20, 35] [60, 70] [80, 90, 100] / \ / \ / \ \ / \ / \ / \ \ / \ / \ / \ \ [10,20] [25,35] [40,60] [65,70] [75,80] [85,90] [95,100] (叶子节点) | | | | | | | ▼ ▼ ▼ ▼ ▼ ▼ ▼ 数据 数据 数据 数据 数据 数据 数据特点:N叉搜索树, 每个节点划分为N个Key, 划分出N个区间每个节点中的元素, 都会下沉到子节点, 作为该子节点的最大值叶子节点这一层构成了数据集的全集使用类似于链表这样的结构, 把叶子节点串起来优势:高度比较低, 降低硬盘IO次数范围查询方便, 高效所有查询落到叶子节点上, 稳定, 高效叶子节点存储数据行, 非叶子节点只存储索引列的key值, 非叶子节点占据的空间小, 可以加载到内存中, 进一步的减少查询时IO的访问次数事务事物就是把多条SQL语句打包成一个整体, 然后在执行过程中要么整个都执行完, 要么一个都不执行. 避免出现这批SQL一半的中间状态性质:原子性 批量执行sql的问题比如转账, 1:1000, 2:1000, 1-2 5001-50050025001500这时候在执行第二个操作之后发生断电, 就会使数据库中的数据出错原子性就是保证要么全部执行完, 要么全部不执行一致性 在执行前后, 数据库的数据都是合法的状态, 不会出现非法的临时结果修改状态在这个例子中就是 500,1000 或 1000, 1500持久性 事物执行完毕之后, 就会修改硬盘上的数据, 事物都是会持久生效的隔离性 描述的是, 多个事物并发执行时, 相互之间产生的影响如果这些同时执行的事物, 恰好是针对同一张表, 进行一些增删查改, 此时会引入一些问题脏读不可重复读幻读问题脏读读取到另一个事务未提交的数据id HP: 3 100 一个事物A和另一个事物B并发执行 其中事物A把 3-70; 3-35; A执行的过程中, B也去读这个HP是30 B读完之后, A又执行了3-35; 这就导致, B读到的数据, 就不是最终的正确数据 而是临时的脏数据解决办法就是给写操作加锁, 在一个事物修改的时候, 另一个事物不能读不可重复读同一个事务内两次读取同一条记录结果不一致此时有三个事物 事物A 3-36;3-36; B 读取HP, 读取HP. A执行完毕后, 提交数据 接下来执行事物B, B读取刚才A提交的数据 在B读取的过程中, 又来了一个事物C C: 3-30, C对A修改的数据再次做出了修改 此时对B来说, 后续再读取整个数据, 读到的结果就和第一次读到的不一样 这个过程就是不可重复读解决办法就是给读加锁, 一个事务在读时, 另一个事务不能修改幻读核心问题同一个事务内两次读取同一范围的记录结果集的数量不同此时有两个个事务, A insert 2 100, B读取,读取. 第一次读取的记录是 1 第二次有1, 2B多了一条幻影数据, 就是幻读幻读的解决办法, 就是串行执行事务上面三个现象和隔离性有什么区别呢?mysql 提供了四个隔离级别, 可以通过配置文件来设置当前服务器是哪个级别的设置不同的隔离级别, 就会使事务之间的并发执行的影响产生不同的差别, 从而会影响到上述的三个问题read uncommitted这种情况下, 一个事务可以读取另一个事务未提交的数据会造成脏读, 不可重复读, 幻读问题但是此时事务之间的并发程度是最高的, 执行速度是最快的read committed一个事务只能读另一个事务提交之后的数据, 给写加锁脏读的问题解决了并发程度降低,执行速度变慢了. 事务之间的隔离性提高了, 就是事务之间的相互影响变小了, 得到的数据更准了repeatable read相当于给写操作和读操作加锁了解决了脏读和不可重复读的问题并发程度进一步降低, 执行速度进一步变慢, 事务之间的隔离性, 进一步提高了serializable 串行化所有事务都是串行执行, 解决了脏读, 不可重复读, 幻读问题最低, 最慢, 最高, 数据最准确一条SQL查询语句是如何执行的事务的四大特性有哪些数据库的事务隔离级别有哪些MySQL为什么使用B树来作索引说一下索引失效的场景什么是慢查询原因是什么可以怎么优化undo log、redo log、binlog 有什么用MySQL和Redis的区别是什么Redis有什么优缺点为什么用Redis查询会比较快Redis的数据类型有哪些Redis是单线程的还是多线程的为什么说一说Redis持久化机制有哪些介绍一下Redis缓存雪崩和缓存穿透如何解决这些问题如何保证数据库和缓存的一致性

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价