![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
起个名字都这么男
Stay hungry,Stay foolish!
展开
-
MySQL中的全局锁和表级锁
全局锁和表锁数据库锁设计的初衷是解决并发出现的一些问题。当出现并发访问的时候,数据库需要合理的控制资源的访问规则。而锁就是访问规则的重要数据结构。根据锁的范围,分为全局锁、表级锁和行级锁三类。全局锁全局锁就是对整个数据库实例加锁。MySQL提供而一个全局读锁的方法。命令是Flush tables with read lock当你需要让整个库处于只读的状态时,可以使用这个命令,之后其他线程的数据更新语句、数据定义语句(建表、修改表等)和更新事务的提交语句等都会被阻塞。全局表的典型使用场景是作为原创 2020-05-16 15:22:41 · 314 阅读 · 0 评论 -
行级锁对性能的影响
怎样减少行级锁对性能的影响MySQL的行级锁是在引擎层有各个引擎自己实现的。但并不是所有的引擎都支持行级锁,比如MyISAM引擎就不支持行级锁。不支持行级锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上的任何时刻只能有一个更新在执行,这就会影响到业务的并发度,InnoDB是支持行锁的。这也是InnoDB用来代替MyISAM的原因之一。从两阶段锁说起在下面的操作序列中,事务B的update语句执行时会是什么现象呢?假设字段id是表t的主键。这个问题的结论取决于事务A在执行完两条updat原创 2020-05-16 15:10:07 · 811 阅读 · 0 评论 -
一文搞懂MySQL前缀索引
引入通常在开发中我们需要定义字符串类型的字段,例如用户名或者用户邮箱等。假设我们在维护一个用户登录系统,用户表的定义:create table User(ID bigint unsigned primary key,email varchar(64))engine=Innodb;如果使用邮箱登录的话,查询语句可能这样写:select ID from User where email='xxx';如果email字段没有加索引,那么这个语句只能做全表扫描。前缀索引MySQL是支持原创 2020-05-16 11:40:40 · 4324 阅读 · 0 评论 -
普通索引和唯一索引的选择
假设你在维护一个市民系统,每一个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果根据身份证号 查用户名的SQL应该这样写:select name from user where id_card= 'xxxxxxxxxxxxxxxx';所以,你会考虑在id_card上建立索引。因为身份证号字段长度比较大,所以把它作为主键会占用较大空间;所以选择,要么给id_c...原创 2020-05-05 13:40:51 · 348 阅读 · 0 评论 -
深入理解MySQL索引(上)
简单来说,索引的出现就是为了提高数据查询的效率,就像字典的目录一样。如果你想快速找一个不认识的字,在不借助目录的情况下,那我估计你的找好长时间。索引其实就相当于目录。几种常见的索引模型索引的出现是为了提高查询效率,但是实现索引的而方式有很多种,所以这里也就引入了索引模型的概念。可以用于提高查询效率的数据结构有好多种,这里先介绍常见的三种。分别是哈希表、有序数组、搜索树。哈希表是一种以键值对形...原创 2020-05-02 18:36:48 · 181 阅读 · 0 评论 -
深入理解MySQL索引(下)
先创建一个T表。mysql> create table T (ID int primary key,k int NOT NULL DEFAULT 0,s varchar(16) NOT NULL DEFAULT '',index k(k))engine=InnoDB;insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'...原创 2020-05-01 22:45:15 · 209 阅读 · 0 评论 -
MySQL45讲:一条update语句是怎样执行的
首先创建一张表;create table T(ID int primary key,c int);如果要更新ID=2这行+1;应该这样写update T set c=c+1 where ID=2;执行这句操作首先还是要与数据库建立连接这是连接器的工作。在一个表进行更新操作时,这张表的缓存就会失效。接下来分析器会对这条跟新语句进行语法和词法分析,如果有问题就会报错提示。然后优化器会决...原创 2020-04-28 16:14:03 · 216 阅读 · 0 评论 -
一条查询SQl是怎样执行的
MySQL的逻辑架构图大体来说,MySQL可以分为Server层和存储引擎层两部分。Server层包括连接器、查询缓存、分析器,优化器等,涵盖MySQL的大多核心服务功能,以及所有的内置函数,存储过程,触发器,视图的实现都在这一层。而存储引擎层负责数据的存储和提取。架构模式是插件式的,支持InnoDB、MyISAM、Memory等多种存储引擎。现在常用的是InnoDB,他从MySQL5.5...原创 2020-04-28 13:04:57 · 249 阅读 · 0 评论 -
MySQL45讲笔记-事务隔离级别,为什么你改了数据我看不见
简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务至此是在引擎层实现的,但并不是所有的MySQL引擎都支持事务,这也是MyISAM被InnoDB取代的原因之一。隔离性与隔离级别提到事务,想到的是ACID(原子性,一致性,隔离性,持久性)原子性:原子性操作就是这个事物执行要么成功,要么失败。将整个过程看作是一个不可分割的整体。一致性:一致性指的是...原创 2020-04-28 12:56:43 · 189 阅读 · 0 评论