【学习笔记】MySQL
文章平均质量分 64
古正风
与其心生敬佩,不如自己便是那样。
展开
-
【MySQL】分库分表
MySQL分库分表 数据库架构演变 刚开始多数项目用单机数据库就够了,随着服务器流量越来越大,面对的请求也越来越多,我们做了数据库读写分离, 使用多个从库副本(Slave)负责读,使用主库(Master)负责写,master和slave通过主从复制实现数据同步更新,保持数据一致。slave 从库可以水平扩展,所以更多的读请求不成问题。 但是当用户量级上升,写请求越来越多,怎么保证数据库的负载足够?增加一个Master是不能解决问题的, 因为数据要保存一致性,写操作需要2个master之间同步,相当于是重复了原创 2022-05-14 17:24:45 · 116 阅读 · 2 评论 -
【MySQL】集群(主从复制、读写分离)
MySQL集群 在实际生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是不能满足实际需求的,一般要通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。 主从复制,热备份&容灾&高可用 读写分离,支持更大的并发 主从复制 主从复制的流程:两个日志(binlog二进制日志&relay log日志)和三个线程(master的一个线程和 slave的二个线程) 主库的更新操作写入binlog二进原创 2022-05-14 17:23:17 · 461 阅读 · 2 评论 -
【MySQL】日志(错误日志、查询日志、二进制日志、慢查询日志、redo log和undo log)
MySQL日志 show variables like 'log_%'; 错误日志:mysqld 使用错误日志名 host_name.err(host_name 为主机名) 并默认在参数 DATADIR(数据目录)指定 的目录中写入日志文件。 查询日志:查询日志记录了客户端的所有语句。由于上线项目sql特别多,开启查询日志IO太多导致MySQL效率 低,只有在调试时才开启,比如通过查看sql发现热点数据进行缓存:show global variables like "%genera%"; 二进制日原创 2022-05-08 18:15:54 · 516 阅读 · 2 评论 -
【MySQL】优化(SQL和索引优化、应用层面优化、修改配置文件优化)
面试常问MySQL怎么优化,可以从这几点考虑。原创 2022-05-08 18:10:53 · 713 阅读 · 2 评论 -
【MySQL】锁机制(排他锁、共享锁、间隙锁、MVCC多版本并发控制)
MySQL的锁机制 表级锁、行级锁 表级锁:对整张表加锁。开销小,加锁快,不会出现死锁;锁粒度大,发生锁冲突的概率高,并发度低 行级锁:对某行记录加锁。开销大,加锁慢,会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度高。 排他锁、共享锁 共享锁:Shared,又称为S 锁,读锁 ,读操作的时候创建的锁,一个事务对数据加上共享锁之后,其他事务只能对数据再加共享锁,不能进行写操作直到释放所有共享锁。 排他锁:Exclusive,又称为X 锁,写锁 ,写操作时创建的锁,事务对数据加上排他锁之后其他原创 2022-05-05 13:02:17 · 1187 阅读 · 2 评论 -
【MySQL】事务(ACID特性、并发存在的问题、隔离级别)
MySQL事务 什么是事务 事务就是一组逻辑操作的集合。 事务:一条或者多条对数据库操作的SQL语句所组成的一个不可分割的单元 事务的所有SQL语句全部执行成功,才能提交(commit)事务,把结果写回磁盘上。 事务执行过程中,有的SQL出现错误,那么事务必须要回滚(rollback)到最初的状态 怎么实现事务 实现事务就是要保证可靠性和并发隔离,或者说,能够满足ACID特性的机制。而这些主要是靠日志恢复和并发控制实现的 日志恢复:数据库里有两个日志,一个事redo log,一个事undo log。r原创 2022-05-04 13:24:53 · 1054 阅读 · 2 评论 -
【MySQL】索引(底层实现原理、B树与B+树区别)
MySQL索引 索引:为了更快地查找到数据 优点: 提高查询效率 缺点: 索引并非越多越好,过多的索引会导致CPU使用率居高不下,由于数据的改变,会造成索引文件的改动,过多的磁盘I/O造成CPU负荷太重 索引分类 索引类型:按逻辑分类、按物理分类 逻辑分类: 主键索引:使用Primary Key修饰的字段会自动创建索引(MyISAM, InnoDB) 。每张表中的主键索引只能有一个,要求主键中的每个值都唯一,即不可重复,也不能有空值。 唯一索引:使用UNIQUE修饰的字段,值不能够重复,主键索引就隶属于原创 2022-04-30 13:58:59 · 1262 阅读 · 4 评论 -
【MySQL】存储引擎(MyISAM、InNoDB、MEMORY)
MySQL的存储引擎 数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是插件式存储引擎。 使用show engines;可以查看存储引擎 MyISAM MyISAM 不支持事务、也不支持外键,索引采用非聚集索引,其优势是访问的速度快,对事务完整性没有要求,以 SELECT、原创 2022-04-30 13:50:49 · 898 阅读 · 3 评论 -
【MySQL】连接查询
连接查询 内连接 #内连接:inner join SELECT a.属性名1,a.属性名2,...,b,属性名1,b.属性名2... FROM table_name1 a inner join table_name2 b on a.id = b.id #inner可以省略,默认join就是内连接 where a.属性名 满足某些条件; #on a.uid = c.uid 区分大表和小表,按照数量来区分,小表永远是整表扫描,然后去大表扫描,所以给大表建索引是有用的 #从stuent小表中取出所有的a原创 2022-04-29 19:34:53 · 794 阅读 · 2 评论 -
【MySQL】limit分页查询
limit分页查询 limit 子句可以被用于强制 select 语句返回指定的记录数 #如果只给定一个参数,它表示返回最大的记录行数目: SELECT * FROM table LIMIT 5; #检索前 5 个记录行 #两个参数:第一个参数是偏移量,第二个参数是检索的行数 SELECT * FROM table LIMIT 5,10; # 偏移5个,后面的10个返回,即:6-15行 #上面两个参数的语法等价于: select * from table limit 10 offset 5原创 2022-04-29 19:30:25 · 3332 阅读 · 2 评论