![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 76
程序员铁蛋
这个作者很懒,什么都没留下…
展开
-
MVCC原理
数据库并发带来的问题数据库并发会带来脏读、不可重复读、幻读等问题。脏读:当前事务读取了其它事务未提交的数据;不可重复读:当前事务中,在相同的查询条件下前后读取的结果不一样,主要侧重于查询记录的某些列不一样;幻读:当前事务中,在相同的查询条件下前后读取的结果集不一样,主要侧重于查询记录的个数增加或减少;数据库隔离级别数据库采用了事务的隔离级别来解决这些问题。读未提交:当前事务可以读取其它事务未提交的数据,不解决脏读、不可重复读、幻读的问题;读已提交:当前事务可以读取其它事务已提交的数据,原创 2021-02-17 14:01:25 · 217 阅读 · 1 评论 -
MySQL数据库集群入门
1. 数据库集群能解决什么问题?单节点和集群哪个读写速度更快?在低并发情况下,单节点MySQL读写速度快;在高并发情况下,大量的读写请求会让单节点的MySQL硬盘无法承受,MySQL集群能把这些请求分发到不同的节点,所以此时集群的读写速度更快。所以数据库集群解决了高并发情况下单节点MySQL的性能瓶颈问题。2. MySQL集群的两种方案读写分离,就是把写操作和读操作分发给不同的节点执行,这样就提升了数据读写的效率。因为大部分系统都是读多写少的,所以可以把写操作发给DB1节点,然后把读操作发给DB2节原创 2020-07-15 11:31:53 · 586 阅读 · 1 评论 -
在CentOS 7下安装MySQL5.7
下载并安装MySQL的数据源并启动wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpmyum -y install mysql57-community-release-el7-10.noarch.rpmyum -y install mysql-community-serversystemctl start mysqld.service修改密码策略和字符编码并重启vim /e..原创 2020-07-14 17:58:49 · 90 阅读 · 0 评论 -
为什么会出现死锁?
1. 认识死锁死锁是指两个或者多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。2. 为什么会产生死锁不同线程(不同事务)并发访问同一张表的多行数据,未按照顺序访问导致死锁不同线程(不同事务)并发访问多张表时,未按照顺序访问导致死锁3. 处理死锁的两种方式检测到死锁的循环依赖,立即返回一个错误,将参数innodb_deadlock_detect 设置为 on 表示开启这个逻辑等查询的时间达到锁等待超时的设定后放弃锁请求。这个超时时间由innodb_lock_原创 2020-06-17 17:47:04 · 630 阅读 · 0 评论 -
行锁:InnoDB替代MyISAM的重要原因
InnoDB能够替代MyISAM的原因有二:InnoDB支持事务:适合在并发条件下要求数据一致的场景InnoDB支持行锁:有效降低由于删除或者更新导致的锁定1. 两阶段锁传统的关系型数据库加锁的一个原则是:两阶段锁原则。两阶段锁:锁操作分为两个阶段,加锁阶段和解锁阶段,并且保证加锁阶段和解锁阶段不相交。我们可以通过下面这张表理解两阶段锁:2. InnoDB行锁模式InnoDB实现了以下两种类型的行锁:共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排它锁排它锁:允许获得原创 2020-06-17 16:58:14 · 230 阅读 · 0 评论 -
全局锁和表锁什么场景会用到
数据库往往是多个用户在连接使用的,那么**如何保证数据并发访问的一致性、有效性呢?**首先我们看一下MySQL的锁机制。根据加锁的范围,MySQL中的锁可分为三类:全局锁;表级锁;行锁;1. 全局锁MySQL全局锁会关闭所有打开的表,并使用全局读锁锁定所有表,其命令为:flush tables with read lock;当执行上面这个命令后,所有的表都变成只读状态,数据更新或者字段更新都将会被阻塞,可以使用下面命令解锁:unlock tables;全局锁一般会在什么时候用到呢原创 2020-05-28 14:39:25 · 562 阅读 · 0 评论 -
联合索引有哪些讲究?
1. 认识联合索引联合索引:是指对表上的多个列进行索引。适合where条件中的多列组合,在某些场景可以避免回表。如下图所示:在进行order by操作时,联合索引的字段数量大于1,比如上图就有a和b两个字段,与单个字段的B+树一样,也是按照字段排序的。比如图中a、b两个字段的值都是(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),是按照(a,b)进行排序的。因此对于a、b两个字段都作为条件时,查询是可以走索引的;对于单独a字段查询也是可以走索引的。但是对于b字段单独查询就走不了原创 2020-05-25 15:45:06 · 711 阅读 · 0 评论 -
为什么添加索引能提高查询速度?
当使用条件查询语句时,我们可以在条件查询的字段上添加索引来提高查询性能,为了便于理解MySQL的索引,我们先了解一些与索引相关的算法。MySQL中使用最频繁的就是B+树索引,而B+树是借鉴了二分查找法、二叉查找树、平衡二叉树、B树的一些思想构建的,所以我们要依次了解这些算法,最后再学习B+树。1. 二分查找法二分查找法的查找过程是:将记录按顺序排列,查找时先以有序列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将查找范围缩小为左半边;如果要找的元素值大于该中点元素,则将查询范围缩小为右半边。以原创 2020-05-22 15:57:35 · 1219 阅读 · 0 评论 -
让order by、group by查询更快
1. Order By原理1.1 MySQL的排序方式按照排序原理分,MySQL排序方式分两种:通过有序索引直接返回有序数据通过Filesort进行排序我们可以使用explain来查看该排序SQL的执行计划,主要看Extra字段:如果该字段里显示是Using index,则表示通过有序索引直接返回有序数据;如果该字段里显示是Using filesort,则表示该SQL通过filesort进行排序;1.2 Filesort是在内存中还是在磁盘中完成排序的?filesort并不一定是在原创 2020-05-18 14:58:16 · 440 阅读 · 0 评论 -
为什么count(*)这么慢?
当我们查询一张数据量很大的表时,使用SQL:select count(*) from t1;这条SQL非常耗时。那么当执行count(*)的时候发生了什么呢?1. count(a)和count(*)的区别?当count()统计某一列时,比如count(a),是根据a列来统计表的记录数,是不统计null的;当count(*)时,无论是否包含null,都会被统计;因此如果想知道结果集的行数,应该使用count(*);2. count(1)比count(*)更快吗?因为count(1)是恒原创 2020-05-13 18:38:07 · 1049 阅读 · 1 评论 -
换种思路写分页查询
通常我们做分页查询的时候,会有如下的SQL语句:select * from t1 limit 10000, 10;表示从表t1中取出从10001行开始的10条记录。看起来只是查询了10条记录,实际上这条SQL语句是先读取10010条记录,然后抛弃前10000条记录,然后获取后面10条想要的数据。因此,当查询表中比较靠后的数据,执行效率是非常低的。针对两种分页场景的优化技巧如下:根据主键连续自增且主键排序的分页查询;根据非主键字段排序的分页查询;1. 根据主键连续自增且主键排序的分页查询s原创 2020-05-13 13:56:42 · 110 阅读 · 0 评论 -
条件字段有索引,为什么查询也这么慢?
在MySQL中,如果需要查找某一行的值,可以先通过索引找到对应的值,然后根据索引匹配的记录找到需要查询的数据行。然而,有些时候,即使查询条件有索引,也会查询很慢,那是因为查询条件的错误使用导致没有正确利用到索引,即有索引,但是查询时没走索引。那么都有哪些条件字段有索引但是不走索引的场景呢?如下:计算操作;隐式转换;模糊查询;范围查询;1. 计算操作1.1 验证计算操作是否能走索引...原创 2020-05-06 16:46:11 · 590 阅读 · 0 评论 -
主键用数字还是UUID?
1. 什么是UUID?UUID是通用唯一识别码的缩写,主要作用是让分布式系统中的数据具有唯一性;UUID由三个部分组成:第一个部分是时间戳生成的;第二个部分是主机的硬件时钟序列;第三个部分是唯一机器识别号2. 为什么要使用UUID?在数据库集群中,为了避免每个MySQL各自生成的主键重复,所有有人考虑采用UUID方法;好处:使用UUID,分布式生成主键,降...原创 2020-04-17 18:21:02 · 734 阅读 · 0 评论 -
MySQL之事务
1. 什么是事务?事务是数据库执行操作的最小逻辑单元;事务可以由一个SQL组成也可以由多个SQL组成;组成事务的SQL要么全部成功,要么全部失败;2. 事务的特性特性说明原子性A一个事务中的所有操作,要么全部完成,要么全部失败,不会结束在中间某个环节一致性C事务开始之前和事务结束之后,数据库的完整性没有被破坏隔离性I一个事务中的操作对其他事务不可...原创 2020-03-28 18:50:05 · 88 阅读 · 0 评论 -
MySQL之SQL优化
1. SQL优化的步骤发现有性能问题的SQL;分析SQL执行计划;优化索引;改写SQL;2. 发现有性能问题的SQL分析慢查询日志发现存在性能问题的SQL;配置慢查询日志:SET GLOBAL slow_query_log = ON指定慢查询日志位置:SET GOLBAL slow_query_log_file = /slow_query_log/slow_quer...原创 2020-03-27 18:52:45 · 92 阅读 · 0 评论 -
MySQL之创建用户、修改密码、用户授权和撤销授权
1. 数据库管理语句(DCL)建立数据库账号:CREATE USER对用户授权:GRANT修改密码:SET PASSWORD收回用户权限:REVOKE2. 创建用户CREATE USER 'username'@'host' IDENTIFIED BY 'password'username:用户名host:指定该用户在哪台主机上允许登录如果只允许本地登录可以指定local...原创 2020-03-26 11:09:58 · 149 阅读 · 0 评论 -
MySQL之数据库物理设计
1. MySQL常见的存储引擎MYISAM:不支持事务,MySQL5.6之前的默认引擎,最常用的非事务型存储引擎,以堆表的形式存储,也就是说存储的数据没有特定的顺序;INNODB:最常用的事务性存储引擎,MySQL5.6之后的默认引擎; 1. 支持原子性、一致性、隔离性、持久性; 2. 数据按主键存储,一般情况下,建议使用自增ID作为表的主键,而业务字段可以通过唯一索引保证数据唯...原创 2020-03-25 18:10:12 · 925 阅读 · 0 评论 -
MySQL之数据库逻辑设计
1. 宽表模式定义:把一个对象的所有属性全存储在表中,如果对象属性越多,那么表的列就越多;宽表模式存在的问题: 1. 数据冗余:表中每一行都存在相同的数据,增加对象占用的空间,如果对数据进行维护,就需要对每一行数据都要进行多次的维护; 2. 更新异常:修改一行中某列的值时,同时修改了多行数据; 3. 删除异常:删除某一数据时不得不删除另一数据; 4. 插入异常:部分数据缺失主键...原创 2020-03-25 15:49:13 · 660 阅读 · 0 评论 -
MySQL之SQL VS NOSQL
1. 关系数据库的特点数据结构化存储在二维表中;每一行都拥有相同的列属性;支持事务的原子性、一致性、隔离性、持久性(ACID);支持SQL语言对数据进行操作;2. 关系数据库的使用场景数据之间存在着一定的关系,需要关联查询的场景,比如:一对多、一对一、多对一等关联关系;需要事务支持,比如:金融、电商类的业务场景中;需要使用SQL语言灵活操作数据;3. 非关系数据库的特点...原创 2020-03-25 14:17:22 · 109 阅读 · 0 评论