首页 > 数据库 >MySQL相关

MySQL相关

时间:2023-08-24 10:58:29浏览次数:35  
标签:聚簇 索引 innodb mysql 分表 相关 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作为缓存导致的双写一致性问题

看博客。

标签:聚簇,索引,innodb,mysql,分表,相关,MySQL
From: https://www.cnblogs.com/chiyun/p/17653597.html

相关文章

  • Redis相关
    redis-pipeline机制pipeline是Redis的一个提高吞吐量的机制,适用于多key读写场景,比如同时读取多个key的value,或者更新多个key的value。因为redis本身是基于Request/Response协议的,在正常情况下,客户端发送一个命令,等待Redis返回结果,Redis接收到命令,处理后响应。如果进行多次的读和......
  • Python相关
    python-内置函数内置函数是python预先定义的函数,这些函数可以提高我们的编码效率。常用的比如map,他可以传两个参数,分别是函数和指定的序列,会根据你提供的函数对指定的序列做映射,还比如zip,我们也叫拉链,就是把两个可迭代的对象打包成一个个元组。还有像hash,是获取一个对象的hash值,e......
  • Python-PyMySQL的一些使用注意事项
    一、关于groupby的使用在部分mysql版本(5.7.xx及以上)中,若select的列中,包含了未被groupby的字段,会报以下错误:[Err]1055-Expression#1ofORDERBYclauseisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'xxxx'whichisnotfunctionallydependentoncolu......
  • 数仓数据导出mysql保留换行符踩坑
    记录一个导数的小坑,数仓里面的数据需要导出到mysql,然后报表展示,并且需要把一段文字里面的换行功能体现出来;数仓里面的原始数据采用的是$符号进行分割每一行数据,直接把$符号替换为\n然后导出到mysql,发现没有生效,反而在页面上把\n展示出来了。那么注意了,经过反复尝试写成\\\n,然......
  • 与.html相关的文件
    与.html相关的文件有HTML文件(.html或.htm)、CSS文件(.css)、JavaScript文件(.js)、图像文件(.jpg、.png、.gif等)、样式表文件(.scss、.less)、字体文件(.ttf、.otf、.woff等)、音频文件(.mp3、.wav)、视频文件(.mp4、.avi)、网页图标文件(.ico)等HTML文件HTML文件是一种文本文件,使用HTML(超文本标......
  • mysql insert出现主键冲突错误的解决方法
    mysqlinsert出现主键冲突错误的解决方法insert时防止出现主键冲突错误的方法在mysql中插入数据的时候常常因为主键存在而冲突报错,下面有两个解决方法:1在insert语句中添加ignore关键字insertignoreintotable(id,name)values('1','username');这是如果id主键已经存......
  • MySQL表按天分区
    建表语句要分区的字段必须为主键或联合主键之一CREATETABLE`test_partition`(`id`int(11)NOTNULLAUTO_INCREMENT,`day`datetimeNOTNULL,`name`varchar(20)DEFAULTNULL,PRIMARYKEY(`id`,`day`));插入数据INSERTINTOtest_partitionvalues (1,......
  • MySQL 5.7 的安装与配置
    一、下载MySQL链接:https://pan.baidu.com/s/16KWOzmHbAvXdFwZi73Obrg?pwd=bwcx提取码:bwcx--来自百度网盘超级会员V1的分享(1)官网:https://dev.mysql.com/downloads/windows/installer/(2)点击Nothanks,juststartmydownload.等待下载完成!!二、安装MySQL(1)选择自定义......
  • net6 使用ef core 映射mysql数据库(方法一)
    1.安装下载nuget包Pomelo.EntityFrameworkCore.MySql和Microsoft.EntityFrameworkCore.Design如下图 2.创建一个模型类,之后映射到数据库里面的表、字段和这个类是一致的。publicclassMovies{///<summary>///id///</summary>......
  • Mysql学习
    ​Mysql​数据库(DataBase,简称DB):存储和管理数据的仓库。数据库管理系统(DataBaseManagementSystem,简称DBMS)DBMS是操作和管理数据库的大型软件。将来我们只需要操作这个软件,就可以通过这个软件来操纵和管理数据库了。此时又出现一个问题:DBMS这个软件怎么知道要操作的......