MySQL相关

mysql-悲观锁

使用select...for update,就实现了。zhelyao注意,mysql的select...for update语句,会把所有扫描的行都锁上,所以在mysql中使用悲观锁,我们必须要确定走了索引,不然可能会全表扫描,锁住整个表。

mysql-乐观锁

在我们要修改前,先查询一个这个值和一个自己维护的版本号,记录下来之后,处理完数据,最后要修改的时候,在where中加入判断,只有值没变且版本号不变才修改。

mysql-索引

索引的分类有五种主键索引、唯一索引、普通索引、全文索引、组合索引

索引可以帮助我们加快查询的速度,减少了扫描的数据类,把随机io变成了顺序io。

对于mysql索引底层的数据结构,就大部分的存储引擎,比如Innodb,MyISAM,都是利用B+树,官方文档里写的是B树,但是实际上使用是B+树,它是B树的一种延伸.还有一种memory存储引擎他使用的数据结构是哈希表。

当然索引也有缺点,创建索引和维护索引要耗费时间,并且当对表中的数据进⾏增加、删除和修改的时候,索引也要动态的维护,会降低增/改/删的执⾏效率。

mysql-为什么用b+树不用b树

我们希望查数据尽量的快,那么对于树来说,肯定深度要尽量低。所以我们采用有序多叉树而不是有序二叉树。

B树是在每个节点都存放所有数据,所以节点上存储的索引数变少了,而b+树只在叶子节点存储数据,同样一个数据页b+树可能存更多的索引,也就使得树的深度变低了

mysql-聚簇索引

叶子节点存放数据,就是聚簇索引,叶子节点存放主键的id,那么是非聚簇索引。也就意味着,聚簇索引将数据存储与索引放到了⼀块,找到索引也就找到了数据

在innodb中,由主键创建的索引是聚簇索引,其他索引都是非聚簇索引,在myisam中,都是非聚簇索引。

mysql-严格模式

简单来说就是MySQL自身对数据进行严格的校验(格式、长度、类型等),比如一个整型字段我们写入一个字符串类型的数据,在非严格模式下MySQL不会报错。

mysql-读写分离

主从复制、读写分离一般是一起使用的。目的很简单,就是为了提高数据库的并发性能。

原理:

①当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中。

②salve从库连接master主库,Master有多少个slave就会创建多少个binlog dump线程。

③当Master节点的binlog发生变化时,binlog dump 线程会通知所有的salve节点,并将相应的binlog内容推送给slave节点。

④I/O线程接收到 binlog 内容后,将内容写入到本地的 relay-log。

⑤SQL线程读取I/O线程写入的relay-log,并且根据 relay-log 的内容对从数据库做对应的操作。

优点:

数据分布:随意开始或停⽌复制,并在不同地理位置分布数据备份

负载均衡:降低单个服务器的压⼒ ⾼可⽤和故障切换:

帮助应⽤程序避免单点失败

实现:

以一主二从为例子

1、首先创建两个用户,给从机用。找到主机的mysql配置文件,写入一些配置,然后重启mysql

2、找到从机的配置文件,写入配置

3、从机用刚才的用户账号密码登录主机,输入一些命令

4、重启从机服务,我们可以用show slave status \G命令查看是否配置成功

mysql-分库分表

当使用分库分表的时候,说明我们的数据库应该面临很高的并发访问了,且单表数据量到达了百万级。

分库的话,就是把库拆的更细一点。

分表有分为水平分表和垂直分表

水平分表: 解决单表记录太大问题,我们可以某个字段分,或者如果是日志类,统计类的表,按照日期分表。

垂直分表:解决列过多的问题,把常用查询的列放到一个表,其余的字段单独再放一个表。常用查询的表我们可以考虑用memory

我记得Apache旗下有个顶级项目,还是专门来分库分表的一个软件,叫ShardingSphere。

mysql-innodb和myisam区别

innodb直接表锁和行锁,myisam只支持表锁

innodb支持事务,myisam不支持

innodb支持聚簇索引

innodb支持外检,myisam不支持

mysql-存储引擎是什么

不同的数据文件在磁盘的不同组织形式,比如说innodb在文件上存储的是两个文件分别是frm,ibd,myisam在文件上存储的是frm,myi,myd

mysql-mvcc

mysql-读写分离数据一致性问题

mysql-主从搭建

简单搭建原理:

1、两个主机上都安装好MySQL服务

2、配置主机的MySQL配置文件、配置从机的MySQL配置文件 使得他们相关的配置文件信息能够在链接的时候对接上;

3、确保主机ip和从机ip在同一网段,即在局域网内;

4、在从机上执行链接信息命令,让从机主动连接主机,由于配置文件的信息校验通过,主机允许从机访问主机MySQL服务从而实现主从结构;

mysql-大数据量分页查询优化

在mysql中,使用limit分页,随着页码增大,效率变低,查询时间和起始记录的位置成正比。

优化1:利用表的索引覆盖加速分页。我们知道,利用索引查询的语句中如果只包含了索引列,那查询会很快。

select id from collect order by id limit 90000,10; 

mysql-redis作为缓存导致的双写一致性问题

看博客。

posted @ 2023-08-24 10:45  王寄鱼  阅读(4)  评论(0编辑  收藏  举报