------MySQL
文章平均质量分 53
Chenchen-
展望天空
展开
-
mysql-MVCC
MVCC,全称Multi-Version Concurrency Control 解决了不可重复读问题,但是会有幻读问题。什么是不可重复读问题? 事务1 读取id = 1 的数据 ,事务2修改了id为1的数据并且提交,事务1又读了一次id=1的数据,两次重复读取同一条的数据不一致,这个叫不可重复读,MVCC能使两次读取的数据一致。MVCC如何解决的? MVCC会将每次事务修改的数据记录下来形成undo log,log上有事务id,当一个事务第一次读取数据的时候,...原创 2021-12-04 10:37:42 · 117 阅读 · 0 评论 -
mysql-ACID
前言:ACID的认识从我接触mysql数据的时候就开始了,从最开始的死记硬背,到后来理解每个特性的意思,再到如何实现每一个特性,我发现随着对ACID的逐步深入,我更深人的了解了MYsql,对mysql事务而言ACID是核心。介绍ACIDA:atomicity 原子性,又叫不可分割性,要么都执行,要不都不执行,undo log(MVCC)C:consistency 一致性 最核心和最本质的要求I:isolation 隔离性 数据库的事务隔离级别有四种,分别是读未提交、读已提交、可重复读、序原创 2021-12-03 14:00:38 · 904 阅读 · 0 评论 -
关于主键id长度不够用蛋疼思考
前言:一般bigint都够用,下面根据不同的情况,分析,解决不同的问题1 之前建表类型为int,现在不够用了怎么办? 改bigint2 虽然是bigint,但是因为经常删除新增数据,导致id增长非常快,预计过一段时间就会超长 可以另外维护一张表,专门记录可用不可用的id,每次插入数据请求接口查询可用的最小id 其他思考:并发量高?可以多查一些放到redis里 其他思考:现在旧数据都是假删除,重新插入也会影响数据,旧数据已删除...原创 2021-09-26 18:00:35 · 609 阅读 · 0 评论 -
innodDB 与Memory 零碎
知识点1 innodDB 引擎 使用B+树索引2 Memory 引擎 使用hash索引3 Memory 引擎也可以使用B+树索引为什么我不建议你在生产环境上使用内存表。这里的原因主要包括两个方面:锁粒度问题; 内存表不支持行锁,只支持表锁。(并发支持不友好) 数据持久化问题。 内存断电清除,mysql 重启 数据清空 那Memory 引擎啥时候用?1 数据量可控(内存比较有限)2 数据丢失不会产生问题...原创 2021-09-11 21:00:30 · 78 阅读 · 0 评论 -
group by 优化
group by 优化方法--索引在数据量大的时候,group by 逻辑都需要构造一个带唯一索引的表,执行代价都是比较高的。因为B+树是有序的,所以直接给group by 的字段加上索引,就可以避免创建临时表排序。group by 优化方法 -- 直接排序Group by 默认在内存中排序,先放到内存临时表,插入一部分数据后,发现内存临时表不够用了再转成磁盘临时表为了避免这种脱了裤子放屁的操作,我们如果知道查出数据量比较大,那就直接进行磁盘排序,给语句加上SQL_BIG_RESULT命令原创 2021-09-05 20:00:45 · 4026 阅读 · 2 评论 -
sql join
Join 能用吗?前提 :如果join 的表有索引如果没有索引:不建议jsoin,这样可能要扫描被驱动表很多次,会占用大量的系统资源。你在判断要不要使用 join 语句时,就是看 explain 结果里面,Extra 字段里面有没有出现“Block Nested Loop”字样。在决定哪个表做驱动表的时候,应该是两个表按照各自的条件过滤,过滤完成之后,计算参与 join 的各个字段的总数据量,数据量小的那个表,就是“小表”,应该作为驱动表。Join 怎么优化?1 - Multi...原创 2021-08-29 21:27:28 · 89 阅读 · 0 评论 -
从删库到跑路
今天写写数据误删怎么办 = =一 预防 大于 恢复 删了之后怎么恢复数据,那都是事后操作,在事情发生前,如何避免问题发生,用较少的资源合理有效避免降低风险才是王道,下面聊聊如何避免 误删数据。1 权限一般情况下,操作线上数据的所有入口都会有权限,一般都会给开发人员线上查询的权限,像这种的,就完全杜绝删除更改数据操作语句,做上限制,不给更改数据的权限。如果要修复线上数据,一般都是有审批流的(其实一般审核的都不看),所以也要做限制,sql_safe_updates 参数设...原创 2021-08-15 18:01:27 · 599 阅读 · 0 评论 -
Binlog 写入机制
写入顺序Log -> binlog cache ->binlogBinlog cache1每个线程分配一个 binlog 内存2 数 binlog_cache_size 用于控制单个线程内 binlog cache 所占内存的大小,超过设置大小就要暂存磁盘3 ;事务提交的时候 会把binlog cache 写入到binlong中4 每个线程有自己 binlog cache,但是共用同一份 binlog 文件。图中 write 和 fsync图中...原创 2021-08-01 21:43:11 · 869 阅读 · 1 评论 -
order by 执行过程与小坑坑
例子表CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `age` int(11) NOT NULL, `addr` varchar(128) DEFAULT NULL, PRIMARY KEY (`id`), KEY `city` (`city`)) ENGINE=InnoDB;语句sele...原创 2021-07-25 19:13:05 · 130 阅读 · 0 评论 -
count 过慢?原理 解决方案
Count(*) 实现原理 数据量大如何count(*)?1 为啥 COUNT(*)慢?因为MVCC多版本并发控制的原因,就算在同一时间内 count(*)的数量也不一定相同。MyISAM 表虽然 count(*) 很快,但是不支持事务; show table status 命令虽然返回很快,但是不准确; InnoDB 表直接 count(*) 会遍历全表,虽然结果准确,但会导致性能问题。2 解决方案 优缺点1 缓存保存计数优点:解决count 过慢问题缺点:会有分布式..原创 2021-07-11 16:49:17 · 2157 阅读 · 0 评论 -
普通索引 和 唯一索引的选择
Select id,k from user where k= 3查询普通索引:找到与3 相等的之后继续找,直到不相等,返回所有记录唯一索引:找到与3相等的直接返回结论:性能差距 微乎其微插入普通索引:将更新记录在 change buffer,语句执行就结束了( change buffer,现将记录缓存起来,下次查询记录的时候,再读取数据页,并且merge合并保存,数据库后台也会定期merge)唯一索引:找到数据页读入内存(磁盘IO),判断是否冲突,不冲突就插入这个值结论...原创 2021-06-27 00:06:57 · 87 阅读 · 1 评论 -
SQL START WITH CONNECT BY PRIOR
原文地址:http://jingyan.baidu.com/article/5d368d1e182bb93f60c05784.html————————————chenchen————————————转载 2016-03-10 20:41:01 · 3139 阅读 · 7 评论