mysql
文章平均质量分 73
mysql字段类型优化
mysql索引原理及优化
mysql事务和锁
mysql执行原理
运筹帷幄小红花
这个作者很懒,什么都没留下…
展开
-
mysql事务的ACID和事务隔离级别
事务A进行范围查询id>5,得到结果=4,此时事务B新增或删除一行数据,并提交事务;因为不可重复读主要发生在同一个事务对同一条数据(主要是被修改的数据)的多次查询结果不一致的问题,那么可以针对该条数据进行加锁,且加行锁即可。1、事务的概念:指的是一个操作序列,在操作序列中,多个操作要么全部执行成功,要么全部执行失败,是一个不可分割的逻辑工作单位。当事务A在同一个事务中,进行三次查询,就会出现第三次查询的结果和第一次查询的结果不一致的情况,称为不可重复读。将事务隔离级别设置为READ COMMITED;原创 2024-07-08 14:10:17 · 543 阅读 · 0 评论 -
mysql索引概念、分类及创建高性能索引
(2)B+Tree的数据结构中,叶子节点的页里面,存放的是索引的字段以及字段对应的主键id;(3)当遇到组合索引的时候,比如字段a,b,c三个字段索引,hash索引是将这三个字段进行hash,然后存储到hash表中,不能仅对a,b或者a,c或者b,c进行部分组合索引,除非再建a,b或者a,c或者b,c索引,加深复杂度。(2)索引列的选择,尽量选择重复率低的列来创建索引,比如id,userName这种,而不要选择gender,枚举类的字段做索引,意义相对不大,因为数据重复,过滤出来的数据依然是那么多。原创 2024-07-05 23:02:30 · 971 阅读 · 0 评论 -
mysql高级-事务的隐式提交
当开启一个事务后,在没提交或回滚的情况下,执行了某些操作,会触发mysql的隐式提交(自动提交);另外再开启一个会话,设置自动提交,开启事务,执行DDL语句,也会触发前面一个会话的隐式提交;当一个会话设置自动提交=false,开启事务,执行update语句,不提交事务;-- 触发隐式提交的语句有很多,DBA级别才会关注更对。1、DDL语句(创建表、修改表、删除表等);二、哪些操作会触发隐式提交?2、在事务里面嵌套事务,如。load data这种。原创 2024-06-20 16:05:59 · 160 阅读 · 0 评论 -
mysql高级语法savepoint
当一个事务发生异常时,有时也不是需要把所有数据都回滚,假如只需要回滚部分数据,可以使用添加保持点,回滚的时候,根据保存点去回滚;insert into admin(id,name,age)value(2,'李四',30);insert into admin(id,name,age)value(3,'王五',40);insert into admin(id,name,age)value(1,'张三',20);2、语法:savepoint 指定保持点名称。原创 2024-06-20 16:01:27 · 202 阅读 · 0 评论 -
mysql 8新特性
(3)类似于使用partition by 代替group by,因为group by使用的时候有很多限制,比如select的时候,只能select group by的字段,如果要select更多字段,得在group by后面加;b、灰度发布:线上测试,加隐藏,仅针对测试,如果发现索引没问题也是有必要的,可以变成正式索引;(1)drop、create、alter等DDL语句同时操作多张表,如果有一个表报错了,5.7之前会执行成功的表,而8后则所有都不执行成功,保证原子性;(1)不会被优化器使用,不可见,原创 2024-07-16 21:33:29 · 528 阅读 · 0 评论 -
mysql锁-共享锁、排他锁和意向锁,记录锁、间隙锁和临键锁
MVCC:通过生成版本链,读取快照信息,解决事务并发的脏读、不可重复读、幻读问题,针对普通查询(未加锁的查询);step3:开启另外一个事务,对同一行数据加排他锁,一直在执行中,阻塞,说明加锁不成功;step2:开启另外一个事务,也对同一行数据加共享锁,执行成功,说明加锁成功;step1:开启一个事务,并对某行数据加共享锁,执行成功,说明加锁成功。按锁的模式分:共享锁、排他锁、意向锁、共享意向锁、共享排他锁。1、共享锁、排他锁、意向锁、共享意向锁、共享排他锁;按锁的算法分:记录锁、间隙锁、临键锁;原创 2024-07-15 11:57:43 · 854 阅读 · 0 评论 -
mysql执行计划详解
const:针对当前select,精确查找,索引一次就命中数据,命中一条数据,select * from user where id=1;1、id:sql语句在经过查询优化器优化之后,有几个select,就会显示几个id。(7)key:真正使用到的索引,为null时,没使用索引,type一般是ALL;eq_ref: 针对当前select,走主键索引或唯一索引,只返回一条数据;ref:针对当前select,走主键索引或唯一索引,可能会返回多条数据;(6)possible_key:可能会使用到的索引。原创 2024-07-09 10:53:20 · 200 阅读 · 0 评论 -
mysql事务隔离实现原理MVCC
m_ids:表示在生成ReadView视图的时候,活跃的事务ID集合,所谓活跃,就是开启了事务,没提交的那些事务的id集合,一条数据,可以被多个会话开启多个事务,就会有多个ReadView;比如某条数据有3个事务同时对它进行修改,事务A的id是1,事务B的id是2,事务3的id是4,则m_ids=[1,2,3],而m_max_trx_id则等于4;m_max_trx_id: m_max_trx_id并不是m_ids中的最大值,而是在m_ids的最大值再递增一位,原创 2024-07-08 10:00:32 · 297 阅读 · 0 评论 -
mysql索引优化
字段不一样,其中一个没索引,则索引失效;8、字符串加引号(不加的话,mysql会自动加上,相当于对索引列做了操作,索引列会失效)like "%abc" 索引失效,因为字符串排序,然后前面不确定,就会失效。2、尽量全值匹配(在联合索引中,where 后面的条件尽量和索引的所有列匹配);count(字段)遍历数据,判断null,为null的数据不返回,返回数据,累加。中间也有范围查询,后面也有范围查询,则后面的范围查询索引会失效。count(0)遍历数据,判断null,不返回数据,只累加。原创 2024-07-09 17:22:02 · 611 阅读 · 0 评论 -
mysql慢查询
取出全部的列(select * 当select *时,如果有某些字段没有加覆盖索引,则会在二级索引查不到字段的时候进行回表操作(回表增加磁盘IO,不满足第三颗星))slow_query_log_file DESKTOP-PLDRIF5-slow.log 慢查询日志文件(linux下的路径是完整路径)mysql记录了所有执行超过long_query_time这个参数设定的时间戳阈值的SQL语句。响应时间: 服务时间(sql处理时间) + 排队时间(等锁,等IO)一、造成慢查询的核心原因:数据量大。原创 2024-07-08 14:39:52 · 311 阅读 · 0 评论 -
mysql事务及事务隔离级别
原因:因为不可重复读主要发生在同一个事务对同一条数据(主要是被修改的数据)的多次查询结果不一致的问题,那么可以针对该条数据进行加锁,且加行锁即可;解决了脏读和不可重复读,同时兼顾并发性能;1、事务的概念:指的是一个操作序列,在操作序列中,多个操作要么全部执行成功,要么全部执行失败,是一个不可分割的逻辑工作单位;当事务A在同一个事务中,进行三次查询,就会出现第三次查询的结果和第一次查询的结果不一致的情况,称为不可重复读。事务A进行范围查询id>5,得到结果=4,此时事务B新增或删除一行数据,并提交事务;原创 2024-06-20 12:47:17 · 343 阅读 · 0 评论