mysql
文章平均质量分 71
CJ-cooper
go figjting!
展开
-
【MYSQL】 三大范式 表的关系 外键 ER图
每一列属性都是不可再分的属性值,确保每一列的原子性两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。通俗点说就一张表只干一件事,每一列都要和主键有关例如创建一个信息表在这个表中,age只依赖于student_id,score(学分)只依赖于,所以说和和。....原创 2022-07-20 17:10:13 · 4059 阅读 · 0 评论 -
数据库缓存一致性问题
数据库缓存一致性问题要保证缓存和数据库的强一致性,最好的方法就是加分布式锁,但是引入缓存的目的就是提高性能,而加分布式锁付出的的代价很可能超过引入缓存带来的性能提升现在 业内常用的是 Cache Aside Pattern + 延时双删 这种无锁的方案,只能在保证并发的前提下尽可能减少不一致的可能Cache Aside Pattern(边缘缓存模式)Cache Aside Pattern(边缘缓存模式),是最经典的缓存一致性处理模式查询操作:程序先从缓存中读取数据,如果命中,则直接返回,如果没有原创 2022-03-16 14:35:17 · 1225 阅读 · 0 评论 -
【MYSQL】MYSQL性能优化
MYSQL优化索引优化1、首先,为了提高查询效率,给常用的查询字段加上索引用explain命令检查sql语句有没有走索引,避免索引失效2、建立覆盖索引,因为辅助索引查询数据时会回表,但如果要查询的字段就在索引就不需要回表3、在设计索引时,尽可能使用同一个索引也可以满足排序又可以用于查找行数据。这样在生成有序结果时,效率会高sql语句的优化sql语句中,避免出现索引失效的情况尽量使用union all 来代替union,因为union会排除重复数据,比较耗时用连接查询代替子查询连接查询时原创 2022-01-19 12:32:07 · 654 阅读 · 0 评论 -
【MYSQL】JOIN优化
joinMYSQL 中并没有 full join 的语法,需要借助 union 关键字来实现:现在假设有两张表 用户表user,和 部门表depart select user.name, user.age, depart.department from user left join depart on user.name = depart.name union select user.name, user.age, depart.department from user righ原创 2022-01-18 14:39:03 · 1049 阅读 · 1 评论 -
【MYSQL】主从复制
MYSQL主从复制主从复制的原理其实就是把主服务器上的 binlog 日志复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。流程图:主要涉及到三个线程:主服务器的 binlog 线程、从服务器的 I/O线程 和 SQL线程binlog线程 :以二进制的形式记录修改了主服务器数据库的SQL语句I/O线程:主服务器上读取binlog日志,并写入到从服务器上的中继日志(Relay log)SQL线程:从服务器中的SQL线程读取中继日志,进行重放主从复制部署模式一原创 2022-01-13 02:09:35 · 228 阅读 · 0 评论 -
【Mysql】垂直切分 水平切分 分库分表
分库分表分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成 ,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。垂直分库/垂直分表垂直分库, 按业务拆分,每个库的结构不一样,专库专用。比如电商业务,拆分为商品库,会员库等。垂直分表,将一个表按照字段分成多个表,每个表存储其中一部分字段优点拆分后业务清晰数据维护简单,不同的业务放在不同机器上当表中字段少时,命中率更高,减少磁盘I/O原创 2022-01-11 16:23:43 · 515 阅读 · 0 评论 -
【Mysql】深入理解 MVCC 多版本并发控制
MVCCMVCC(Multi-Version Concurrency Control),即多版本并发控制。是 innodb 实现事务并发与回滚的重要功能。锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销.具体实现是在数据库的每一行中,额外添加三个字段:DB_TRX_ID : 记录插入或更新该行的最后一个事务的事务IDDB_ROLL_PTR: 指向改行对应undolog 的指针DB_ROW_ID: 单调递增的ID,他就是AUTO_I原创 2021-11-27 01:27:25 · 629 阅读 · 0 评论 -
【Mysql】三大日志 redo log、bin log、undo log
文章目录redo log(物理日志\重做日志)binlog(逻辑日志/归档日志)update语句执行流程Uodolog(回滚日志/重做日志)undo log+redo log保证持久性redo log(物理日志\重做日志)redo log是InnoDB存储引擎层的日志,又称重做日志文件,是物理日志。redo log记录数据修改后新数据的备份、冗杂的undo log、未提交的事务和回滚的事务,数据缓存到内存中,只是在事务提交前将redo log持久化到磁盘redo log 可以保证即使数据库发生异常重原创 2021-11-24 20:45:00 · 829 阅读 · 0 评论 -
【Mysql】表锁 行锁 记录锁 间隙锁
Mysql中的锁基于锁的属性分类:共享锁、排他锁。基于锁的状态分类:意向共享锁、意向排它锁根据锁的粒度分类:全局锁、页锁、表级锁、行锁(记录锁、间隙锁、和临键锁),实际上的锁就这些,上面两种分类只是站在不同维度上看这些锁页级锁仅被BDB存储引擎支持,这里不介绍全局锁全局锁就是对整个数据库实例加锁,MySQL提供了一个加全局读锁的方法,命令是 Flush tables with read lock (FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻原创 2021-11-15 18:35:23 · 749 阅读 · 0 评论 -
【Mysql】索引下推
索引下推当 sql满足最左前缀原则的时候,最左前缀可以用于在索引中定位记录,而索引下推就是用来优化那些不符合最左前缀的部分例如有一联合索引(name,age),索引结构如下:现有一需求,sql为: select * from tuser where name like '张%' and age=10;根据最左前缀原则,这里只有name可以用索引,可以定位到ID3,在Mysql 5.6 版本之前,只能从ID3开始一个一个回表,到主键索引找到数据行,再对比字段值在Mysql 5.6 版本引入了原创 2021-11-13 19:54:58 · 883 阅读 · 0 评论