![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySQL
文章平均质量分 70
MySQL学习笔记
TABE_
这个作者很懒,什么都没留下…
展开
-
数据库缓存穿透/缓存击穿/缓存雪崩
这里写目录标题缓存穿透解决方案布隆过滤器缓存空对象缓存击穿解决方案缓存雪崩解决方案缓存穿透缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,这时候就相当于出现了缓存穿透。解决方案布隆过滤器布隆过滤器实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空原创 2022-03-27 15:04:47 · 872 阅读 · 0 评论 -
数据库缓存一致性
这里写目录标题保证缓存一致性(双写一致性)先更新数据库,后更新缓存先更新缓存,后更新数据库先删除缓存,后更新数据库先更新数据库,后删除缓存Redis在更新数据库的值时,为什么要删除缓存,而不是更新缓存缓存穿透解决方案布隆过滤器缓存空对象缓存击穿解决方案缓存雪崩解决方案保证缓存一致性(双写一致性)我们这里列出来所有策略:(1)先更新数据库,后更新缓存;(2)先更新数据库,后删除缓存;(3)先更新缓存,后更新数据库;(4)先删除缓存,后更新数据库。先更新数据库,后更新缓存这种场景一般是没有人使用的,主要原创 2022-01-16 17:18:51 · 644 阅读 · 0 评论 -
数据库慢查询及其优化
这里写目录标题什么是数据库慢查询?MySQL 慢查询的相关参数解释慢查询日志配置最大连接数的查看与设置常见的慢查询优化什么是数据库慢查询?数据库慢查询,就是查询时间超过了我们设定的时间的语句。可以通过以下语句查看设定的时间:默认的设定时间是10秒,也可以通过下面这个语句修改默认的设定时间:set long_query_time=0.0001;MySQL 慢查询的相关参数解释slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭log-slow-queries :旧版(5原创 2022-03-07 21:26:32 · 6388 阅读 · 0 评论 -
某个表有近千万数据,CRUD比较慢,如何优化?(数据库高可用)
这里写目录标题分库分表垂直分表垂直分表的优点垂直分表的缺点垂直分库垂直分库的优点垂直分库的缺点水平分表水平分表的优点水平分表的缺点水平分库水平分库的优点水平分库的缺点主从复制+读写分离主从复制主从复制的过程主从复制的模式主从复制的优点读写分离缓存redismemcachememcache的流程当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下:限定数据的范围:务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内原创 2022-01-06 21:14:23 · 4103 阅读 · 0 评论 -
数据库连接池
这里写目录标题数据库连接池的基本原理数据库连接池的优点数据库连接池的基本原理数据库连接池类似于线程池,都是池化技术的具体体现。数据库连接池的基本思想是:为数据库连接建立一个“缓冲池”,预先在池中放入一定数量的数据库连接管道,需要时,从池子中取出管道进行使用,操作完毕后,在将管道放入池子中,从而避免了频繁的向数据库申请资源,释放资源带来的性能损耗。数据库连接池的优点资源重用:由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。在减少系统消耗的基础上,增进了系统环境的平稳性(减少内存碎原创 2022-01-06 20:17:36 · 207 阅读 · 0 评论 -
MySQL如何处理死锁
MySQL有两种死锁处理方式:等待,直到超时(innodb_lock_wait_timeout=50s设置锁等待的时间,前提已经检测到锁的产生)。发起死锁检测,主动回滚一条事务,让其他事务继续执行,回滚代价最小的那一个事务(innodb_deadlock_detect=on)。由于性能原因,一般都是使用死锁检测来进行处理死锁。死锁检测的原理是构建一个以事务为顶点、锁为边的有向图,判断有向图是否存在环,存在即有死锁。检测到死锁之后,选择插入、更新或者删除的行数最少的事务回滚,基于 INFORMATI原创 2022-05-18 19:08:00 · 6412 阅读 · 0 评论 -
CAS实现乐观锁
这里写目录标题数据库中锁存在的问题CASCAS导致的ABA问题数据库中锁存在的问题悲观锁机制存在以下问题:在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。一个线程持有锁会导致其它所有需要此锁的线程挂起。如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。而另一个更加有效的锁就是乐观锁。乐观锁( Optimistic Locking)其实是一种思想,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据原创 2022-02-24 20:38:02 · 1147 阅读 · 0 评论 -
MySQL数据库的锁详解
目录悲观锁悲观锁按使用性质分类共享锁(S锁)排他锁(X锁)更新锁(U锁)悲观锁按作用范围分类(按锁的粒度分类)行锁表锁悲观锁的实现乐观锁乐观锁的实现版本号时间戳待更新字段所有字段悲观锁的优缺点乐观锁的优缺点乐观锁与悲观锁的选择数据库锁的种类一般分为两种:一种是悲观锁,一种乐观锁。悲观锁悲观锁(Pessimistic Lock)具有强烈的独占和排他特性,它指的是对数据被外界修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制。传统的关系数据库里用到了很原创 2022-01-06 20:06:27 · 15843 阅读 · 1 评论 -
数据库的隔离级别
这里写目录标题数据库的隔离级别Mysql和Oracle的隔离级别数据库隔离性设置不同会出现的问题(脏读、不可重复读、丢失修改、幻读)脏读不可重复读幻读(虚读)丢失修改数据库的隔离级别为了达到事务的四大特性,数据库定义了4种不同的事务隔离级别,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable。READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读原创 2022-01-05 21:37:49 · 917 阅读 · 0 评论 -
MySQL的两阶段提交(数据一致性)
MySQL的两阶段提交两阶段提交过程为什么要写redo log,不写redo log的话,根本就不会出现“两阶段提交”的麻烦事啊?为什么要写两次redo log,写一次不行吗?在两阶段提交的情况下,是怎么实现崩溃恢复的呢?在讲解两阶段提交之前,需要对MySQL中的binlog、redo log和undo log有一定的了解。两者的适用场景不同,binlog适用于维护集群内数据的一致性,redo log用于崩溃恢复,undo log相对于前面两种日志更好理解些,就是为了回滚事务用的。两阶段提交过程Inn原创 2022-05-23 21:27:09 · 7077 阅读 · 5 评论 -
MySQL事务详解
这里写目录标题一致性Mysql怎么保证一致性的?原子性Mysql怎么保证原子性的?隔离性Mysql怎么保证隔离性的?快照读和当前读MVCC如何实现持久性Mysql怎么保证持久性的?事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务,一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成。ACID四大特性之中,C(一致性)是目的,A(原子性)、I(隔离性)、D(持久性)是为了保证一致性,数据库提供的手段。数据库必须要实现AID三大特性,才有可能实现一致性原创 2022-01-05 21:33:19 · 611 阅读 · 0 评论 -
MySQL引擎
这里写目录标题MySQL四种常见数据库引擎InnoDB存储引擎MyISAM存储引擎MEMORY存储引擎innodb和myisam的区别数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。MySQL四种常见数据库引擎InnoDB存储引擎InnoDB原创 2022-01-05 21:11:53 · 446 阅读 · 0 评论 -
为什么不建议使用select *
由于辅助索引的数据比聚集索引少很多,很多情况下,通过辅助索引进行覆盖索引(通过索引就能获取用户需要的所有列),都不需要读磁盘,直接从内存取,而聚集索引很可能数据在磁盘(外存)中(取决于buffer pool的大小和命中率),这种情况下,一个是内存读,一个是磁盘读,速度差异就很显著了,几乎是数量级的差异。如果用户使用select *,获取了不需要的数据,则首先通过辅助索引过滤数据,然后再通过聚集索引获取所有的列,这就多了一次b+树查询,速度必然会慢很多。...原创 2022-08-28 22:16:20 · 727 阅读 · 0 评论 -
数据库索引详解
这里写目录标题数据库索引介绍索引的优点索引的缺点什么时候使用索引什么时候不使用索引Mysql索引的结构Innodb存储引擎(默认是 B+Tree索引)MyISAM存储引擎(默认是 FULLTEXT索引)Memory存储引擎(默认是 Hash索引) 默认MySQL索引为什么大量使用B+Tree为什么不用Hash表为什么不用红黑树(AVL树)为什么不用B树B+树的查找过程数据库索引介绍MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,主要用于加速查询。索引是在基于数据原创 2022-01-05 20:29:22 · 3484 阅读 · 0 评论 -
MySQL索引的分类及区别
目录数据库的索引类型聚集索引和非聚集索引的区别唯一索引和主键的区别数据库的索引类型从物理存储角度,索引可以分为以下两类:聚集索引:主索引文件和数据文件为同一份文件,数据的排列顺序和索引的排列顺序一致。非聚集索引:非聚集索引的叶子层并不和实际数据页相重叠,数据和索引的排列顺序不一定一致。从逻辑角度,索引可以分为以下几类:普通索引:最基本的索引,它没有任何的限制,仅加速查询。唯一索引:它与前面的普通索引类似,不同的是索引列的值必须唯一,但允许有空值。主键索引:它是一种特殊的唯一索引,不允许原创 2022-01-05 19:43:25 · 2345 阅读 · 0 评论 -
数据库三大的范式
这里写目录标题第一范式第二范式第三范式第一范式第一范式条件:数据库表的每一列都是不可分割的基本数据项,即每一列都是不可拆分的原子项。如以下表存在可再分项(高级职称),所以不满足第一范式。在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。非规范化转换为规范化的第一范式方法很简单,将表分别从横向、纵向展开即可。将高级职称横向展开即可以得到满足第一范式的表结构。第二范式第二范式条件:关系模式必须满足第一范式,并且所有非主属性都完全依原创 2022-01-04 20:44:12 · 450 阅读 · 0 评论 -
MySQL中select语句的执行过程
MySQL的架构如下图所示一个select语句的执行过程如下所示。原创 2022-07-17 21:40:05 · 1525 阅读 · 0 评论 -
union与join的区别
这里写目录标题unionjoin垂直分表之后,查询所有数据需要join操作。水平分表之后,查询所有数据都需union操作。union使用 union 可以将多个select语句的查询结果组合起来。语法为select 字段1,字段2 from table1 union select 字段1,字段2 from table2;。注意:union 关键字两边的select语句的字段数量是需要一致的,并不要求字段名称一致。查询的最终结果集的字段是以第一个select语句的字段来命名。union自动屏蔽原创 2022-03-15 21:01:46 · 1872 阅读 · 0 评论 -
数据库中join的类型
这里写目录标题一级目录二级目录三级目录内连接inner join用法实例左外连接LEFT [OUTER] JOIN用法实例右外连接RIGHT [OUTER] JOIN用法实例全连接FULL [OUTER] JOIN用法交叉连接CROSS JOIN用法自然连接NATURE JOIN用法自连接SELF JOIN左连接,右连接,内连接和全外连接的区别一级目录二级目录三级目录为了演示他们的区别,我们构建两个表,员工表emp,部门表dept,员工表中有21条记录,其中19条员工记录是有部门可查的,部门编号能原创 2021-12-30 21:42:18 · 2341 阅读 · 0 评论 -
常用SQL语句
这里写目录标题数据定义语言(DDL)数据操作语言(DML)(增删改查)数据控制语言(DCL)事物控制语言(TCL)常用的SQL语句分为四类数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)和事物控制语言(TCL)。数据定义语言(DDL)DDL使我们有能力创建或删除表格。也可以定义索引(键),规定表之间的链接,以及施加表间的约束。CREATE DATABASE - 创建新数据库ALTER DATABASE - 修改数据库CREATE TABLE - 创建新表ALTER TA原创 2021-12-30 21:12:26 · 401 阅读 · 0 评论 -
关系型和非关系型数据库的区别
这里写目录标题关系型数据库优点缺点非关系型数据库优点缺点关系型数据库关系型数据库,是指采用了关系模型来组织数据的数据库,关系型数据库的最大特点就是事务的一致性。关系型数据天然就是表格式的,因此数据存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。。优点易于维护:都是使用表结构,格式一致。使用方便:SQL语言通用,可用于复杂查询。复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。缺点读写性能比较差,尤其是海量数据的高效率读写。固定的表结构,灵活度稍欠。原创 2021-12-30 21:07:18 · 407 阅读 · 0 评论