随笔分类 -  Mysql

上一页 1 ··· 3 4 5 6 7

间隙锁GAP
摘要:当用范围条件检索数据而不是相等条件检索数据,并请求共享或排他锁是,InnoDB会给符合范围条件的已有数据记录的索引项加锁;对于键值在条件范围内但不存在的记录,叫做间隙。InnoDB也会对这个间隙进行加锁,这种锁机制就是间隙锁。 间隙锁只会在Repeatable read隔离级别下使用,例如test表 阅读全文

posted @ 2021-02-03 20:15 Eleanor123 阅读(144) 评论(0) 推荐(1)

乐观锁和悲观锁
摘要:乐观锁是一种思想,具体实现是表中有一个版本字段,第一次读的时候获取到这个字段。处理完业务逻辑开始更新的时候,需要再次查看该字段的值是否和第一次一样。如果一样更新,反之不更新。为什么叫乐观,原因是这个模式没有从数据库加锁,等到更新的时候再判断是否可以更新。 悲观锁是数据库成名加锁,都会阻塞去等待锁。 阅读全文

posted @ 2021-02-03 20:14 Eleanor123 阅读(78) 评论(0) 推荐(1)

MVCC和事务的隔离级别
摘要:数据库事务有不同的隔离级别,不同的隔离级别对锁的使用是不同的,锁的应用最终导致不同事务的隔离级别。MVCC(Multi-Version Concurrency Control)多版本并发控制,MVCC就是行级锁的一个升级。 事务的隔离级别是通过锁的机制来实现的,只不过隐藏了加锁细节。 表锁中读写是阻 阅读全文

posted @ 2021-02-03 20:11 Eleanor123 阅读(479) 评论(0) 推荐(1)

行锁简介
摘要:MySQL一般使用的是InnoDB存储引擎。InnoDB和MyISAM有两个本质区别:InnoDB支持行锁、事务。表锁是默认的,即使InnoDB不走索引,加的表锁是自动挡。InnoDB比较重要的一个特性就是支持行锁。InnoDB提供了两种类型的行锁: 共享锁(S锁):允许一个事务去读一行,阻止其他事 阅读全文

posted @ 2021-02-03 20:10 Eleanor123 阅读(435) 评论(0) 推荐(0)

表锁简介
摘要:锁分为表锁和行锁: 表锁开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度低。 行锁开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高。 不同的存储引擎支持的锁粒度不一样。InnoDB行锁和表锁都支持,MyISAM只支持表锁。InnoDB只有通过索引条件检索数据才使 阅读全文

posted @ 2021-02-03 20:08 Eleanor123 阅读(349) 评论(0) 推荐(0)

如何创建一个好的索引?
摘要:创建一个好的索引,需要考虑以下方面: 最左匹配原则。这个非常重要,MySQL会一直向右匹配直到遇到范围查询(<、>、between、Like)就停止匹配。 尽量选择区分度高的列作为索引。区分度的公式是COUNT(DISTINCT col)、COUNT(*)。表示字段不重复的比例,比率越大扫描的记录数 阅读全文

posted @ 2021-02-02 10:32 Eleanor123 阅读(590) 评论(0) 推荐(1)

=、in自动优化顺序
摘要:不需要考虑=、in的顺序,MySQL会自动优化这些条件的顺序,以匹配尽可能多的索引列。例如索引{a,b,c,d},查询条件c>3 and b =2 and a=1 and d<4与a=1 and c>3 and b=2 and d<4等顺序都是可以的,MySQL会自动优化成a=1 and b=2 a 阅读全文

posted @ 2021-02-02 10:31 Eleanor123 阅读(99) 评论(0) 推荐(1)

索引最左匹配原则
摘要:索引可以简单的一个列如{a},也可以多个复杂的列组合形成{a,b,c,d}即联合索引。如果是联合索引的话,那么key也可以由多个列组成,同时索引只能用于查找key是否存在(相等),遇到范围查询(<、>、between、like左匹配)等就不能进一步匹配,后退为线性查找。列的排列顺序决定了可命中索引的 阅读全文

posted @ 2021-02-02 10:29 Eleanor123 阅读(727) 评论(0) 推荐(0)

聚集索引与非聚集索引
摘要:1、概念 聚集索引就是以主键创建的索引,非聚集索引就是以非主键创建的索引 2、区别 (1) 聚集索引在叶子节点存储的是表中的数据,非聚集索引在叶子节点存储的是主键和索引列。使用非聚集索引查询出来的数据时,拿到叶子上的主键再去查找想要的数据。(拿到主键再查找这个过程叫回表)。 (2) 非聚集索引也叫做 阅读全文

posted @ 2021-02-02 10:28 Eleanor123 阅读(468) 评论(0) 推荐(1)

哈希索引
摘要:1、哈希索引采用的是哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需要一次哈希算法即可立即定位到相应的位置,速度非常快。 2、本质上就是把键值换算成新的哈希值,根据这个哈希值来定位。 3、哈希值的局限: 第一,哈希索引没有办法理由索引完成排序。 第二,不支 阅读全文

posted @ 2021-02-02 10:27 Eleanor123 阅读(513) 评论(0) 推荐(1)

索引能提高检索速度,降低维护速度
摘要:索引为什么能提高检索速度? 索引将无序的数据变成有序(相对),如果没用索引我们需要遍历双向链表来定位对应的页。有了索引就通过“目录”很快能定位到对应的页上。底层结构是B+树,B+树作为树的一种实现,能够让我们很快地查找出对应的记录。 为什么索引会降低插入、删除、修改等维护任务的速度? 1、B+树是平 阅读全文

posted @ 2021-02-02 10:26 Eleanor123 阅读(388) 评论(1) 推荐(2)

MySQL索引基本知识
摘要:1、MySQL的基本存储结构是页(记录都存在页里面),每个数据页可以组成一个双向链表。而每个数据页中的记录又可以组成一个单向链表。 2、每个数据页都会为存储在里面的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指 阅读全文

posted @ 2021-02-02 10:22 Eleanor123 阅读(59) 评论(0) 推荐(1)

上一页 1 ··· 3 4 5 6 7