![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
db
古笑来
愿今日之所作,可为君行一时方便!
展开
-
数据库相关面试题
分布式唯一id的生成?利用数据库自增ID优点:最简单。 缺点:单点风险、单机性能瓶颈。Twitter Snowflake优点:高性能高可用、易拓展。 缺点:需要独立的集群以及ZK。美团做法时间戳+用户标识码+随机数优点:方便、成本低。基本无重复的可能。自带分库规则,这里的用户标识码即为用户ID的后四位,在查询的场景下,只需要订单号就可以匹配到相应的库表而无需用户ID,只取四位是希望订单号尽可能的短一些,并且评估下来四位已经足够。可排序,因为时间戳在最前面。缺点:长度稍长,性能要比i原创 2021-12-14 09:19:11 · 291 阅读 · 0 评论 -
数据库分库分表
什么情况下分库,什么情况下分表请求数据库的网络io过大,带宽不够用;数据库磁盘io过大,降低读写性能 分库单表数据量过大,优化sql,建立索引,查询依然很慢 分表io瓶颈 分库cpu瓶颈 分表垂直切分?是根据业务来拆分数据库,同一类业务的数据表拆分到一个独立的数据库,另一类的数据表拆分到其他数据库。比如说一个新零售的电商数据库,我们可以把跟商品相关的数据表拆分成一个数据库,然后在这些数据表的基础之上,构建出商品系统。水平切分按照某个字段的某种规则,把数据切分到多张数据表。一张数原创 2021-12-14 09:19:30 · 277 阅读 · 0 评论 -
spring传播行为
spring七种事务传播行为原创 2021-12-13 14:01:23 · 163 阅读 · 0 评论 -
数据库的索引
覆盖索引从索引中就能查到的记录联合索引是什么多个字段建立的一个索引。如果查询结果只需要索引中的字段也可以避免回表聚簇索引、也叫一级索引一张表中只有个一索引索引,一般是主键索引(没有主键的时候会用列号),他们的叶子节点上存储的是正行数据。非聚簇索引、也叫二级索引、也叫辅助索引叶子节点上存储的是数据块的指针(myisam中是存储地址 innodb中是主键或列号),需要二次查找。对于mysql中两种引擎myisam innodb来说,myisam中都是非聚集索引,innodb中一定有一个非聚集索原创 2021-12-13 14:00:42 · 58 阅读 · 0 评论 -
数据库的隔离机制
数据库的四大特性隔离性(Isolation)持久性(Durability)一致性(Consistency)原子性(Atomicity)独持一原(idca):一致性 是说事务结束后不能破坏数据库原有的约束。事务四大特性? 独持一原(idca)隔离性(Isolation): 如果2个事务 T1 和 T2 同时运行,事务 T1 和 T2 最终的结果是相同的,不管 T1和T2谁先结束。持久性(Durability): 一旦事务提交,不管发生什么(崩溃或者出错),数据要保存在数据库中。一致性(Co原创 2021-12-13 13:55:03 · 1979 阅读 · 0 评论 -
mysql中的mmr
mrr是什么全称是 Multi-Range Read Optimization将随机 IO 转化为顺序 IO 以降低查询过程中 IO 开销的一种手段不开启mrr便会想上图一样,来回切换磁盘读取数据,降低了IO开销对于 Myisam,在去磁盘获取完整数据之前,会先按照 rowid 排好序,再去顺序的读取磁盘。对于 Innodb,则会按照聚簇索引键值排好序,再顺序的读取聚簇索引。优化器将二级索引查询到的记录放到一块缓冲区中;如果二级索引扫描到文件的末尾或者缓冲区已满,则使用快速排序对缓冲区中的内原创 2021-12-13 13:53:49 · 1022 阅读 · 1 评论 -
mysql的mvcc
多版本并发控制MVCC在MySQL的InnoDB中的实现在InnoDB中,会在每行数据后添加两个额外的隐藏的值来实现MVCC,这两个值一个记录这行数据何时被创建,另外一个记录这行数据何时过期(或者被删除)。 在实际操作中,存储的并不是时间,而是事务的版本号,每开启一个新事务,事务的版本号就会递增。 在可重读Repeatable reads事务隔离级别下:SELECT时,读取创建版本号<=当前事务版本号,删除版本号为空或>当前事务版本号。INSERT时,保存当前事务版本号为行的创建版本号原创 2021-12-13 13:52:50 · 178 阅读 · 0 评论 -
union和unionAll
1、union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序;2、union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高。...原创 2021-12-13 13:52:18 · 461 阅读 · 0 评论 -
数据库中的join
left join,在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。right join,在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。inner join(内连接),在两张表进行连接查询时,只保留两张表中完全匹配的结果集。full join,在两张表进行连接查询时,返回左表和右表中所有没有匹配的行。...原创 2021-12-13 13:51:40 · 206 阅读 · 0 评论 -
mysql日志
https://www.jianshu.com/p/336e4995b9b8https://zhuanlan.zhihu.com/p/343449447事务自己的理解java中的事务,当执行过中出现异常,那么这次事务根本就不会提交到数据库,spring 帮我们做的数据库中的事务,多个数据库操作组成的操作集合,一起运行,要么一起成功,要么一起失败。日志简述redo-log undo-log 是innodb数据库引擎层的日志,目的是宕机重启后原来的事务要么一起成功,要么一起失败。bin-log是原创 2021-12-13 13:50:41 · 69 阅读 · 0 评论 -
mysql中的锁
https://juejin.cn/post/6844903666332368909https://www.jianshu.com/p/0673df5682f3mysql中的锁有几种自增锁(Auto-inc Locks) 表锁共享/排它锁(Shared and Exclusive Locks) 表锁 行锁意向共享锁 、 意向排它锁 表锁插入意向锁(Insert Intention Locks) 间隙锁(Gap Locks)记录锁(Record Locks)临键锁(原创 2021-12-13 13:49:53 · 183 阅读 · 0 评论 -
count
count(*)、count(1)和count(列名)的区别1、执行效果上:l count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULLl count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULLl count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。...原创 2021-12-13 13:49:22 · 315 阅读 · 0 评论