mysql
我不是攻城狮
越努力越幸运
展开
-
order by工作过程和优化
order by 是由优化器决定的,如果优化器认为filesort速度快,那么走filesort排序,如果优化器认为索引速度快,那么走索引排序。原创 2024-05-28 15:26:37 · 151 阅读 · 0 评论 -
优化Using filesort
xxx。原创 2024-05-28 00:16:18 · 108 阅读 · 0 评论 -
mysql innodb为什么选择B+树
mysql底层采用B+树的数据结构,页索引16KB,全部存储到B+树的非叶子节点上,16KB全是索引数据,相对于B树存储键值对而言,能够存储更多的数据。并且由于索引的关系,树的层高就更矮,而底层的双向链表,对于范围索引,排序查找、去重更有优势。原创 2024-05-28 00:12:33 · 95 阅读 · 0 评论 -
Innodb下修改事务工作流程(buffer pool、redo log、undolog、binlog)
undolog的写入最开始写到内存中的,然后由1个后台线程定时刷新到磁盘中的。Innodb优先从Buffer Pool中查询该条记录,如果没有就从磁盘文件中缓存到Buffer Pool中。binlog中记录的信息包括:事务开始的时间、数据库名、表名、事务ID、SQL语句等。提交事务后,后台异步线程将Buffer Pool写入磁盘中,这里会有一定的延时。同步修改到redo log buffer,此时并没有写入磁盘中。更新Buffer pool中的脏页,此时并没有写入磁盘中。4、写入redo log日志。原创 2024-02-16 15:01:45 · 231 阅读 · 0 评论 -
union和union all区别
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则排序;效率高 UnionAll:对两个结果集进行并集操作,包括重复行,不进行排序;效率低原创 2024-02-16 12:50:09 · 82 阅读 · 0 评论 -
truncate、delete、drop的区别?
不支持删除内容不支持。原创 2024-02-16 12:31:11 · 188 阅读 · 0 评论 -
mysql sql执行次序
from--->join--->where-->group by-->having-->select--->distinct--->order by --->limit原创 2024-02-16 11:18:24 · 125 阅读 · 0 评论 -
mysql like‘%xxx%‘优化
3、union联合使用虚拟队列进行查询。2、为虚拟列创建索引。原创 2024-02-12 21:51:00 · 337 阅读 · 0 评论 -
优化msyql主从延时
2、优化单台机器SQL线程工作数量,反复调整到机器最大瓶颈(slave-parallel-workers,32核机器尽量尽量选用8-16,预留一些供cpu使用),增加多台机器进行从节点的SQL线程工作。1、优化网络带宽和选择性能更好的从库机器(CPU、内存、磁盘)2、主从复制中从库SQL线程资源有限,遭遇机器瓶颈。主从复制改为并行复制方案。1、网络延迟或者从服务器机器性能一般。原创 2024-02-10 19:02:05 · 101 阅读 · 0 评论 -
msyql主从复制
1、主从复制开启,主库负责dump当前binlog日志(update、insert、delete),从服务器准备开启IO线程和sql线程。2、从库负责向主库发起连接,IO线程负责拉取主库的binlog日志并且同步到relay log日志。3、从服务器使用sql线程执行relay log里面的sql语句,并且持久化到从服务中。原创 2024-02-10 18:45:56 · 359 阅读 · 0 评论 -
binlog、undolog、redolog
binlog:适用于innodb和myisam引擎,用于数据备份、主从复制,保存所有的ddl和dml数据,以二进制进行存储。undolog:适用于innodb引擎,负责正常回滚事务、崩溃回滚事务,主要记录。redolog:适用于innodb引擎,负责崩溃恢复和数据持久化,主要记录执行。执行的sql,一旦事务需要回滚,直接执行事务发生前的sql语句。原创 2024-02-10 17:52:12 · 133 阅读 · 0 评论 -
limit深度分页和优化思路
先读取m+n条记录,然后抛弃前面n条记录,返回从m开始n条记录,深度分页越往后性能越差。3、再度优化提升思路,加入order by ,走联合索引。1、定义一个自增序列,一个子查询将所有的自增id全部查出。参考oracle rowsnumber分页思路。假设查询商品数量、商品名称等。原创 2024-02-10 17:25:13 · 251 阅读 · 0 评论 -
count(1)、count(*)、count(字段)区别
count(1)、count(*),没有区别,直接查询符合条件的行数(不管有没有null值)。count(字段)查询符合条件不为空的行数。原创 2024-02-10 15:11:43 · 103 阅读 · 0 评论 -
mysql索引和索引失效
原创 2024-02-10 14:03:43 · 212 阅读 · 0 评论 -
mysql RR、RC隔离级别实现原理
采用乐观锁实现,它通过对不同事务生成不同的快照版本,通过UNDO版本链进行管理并且在MVCC里面,规定了高版本能够看到低版本的事务变更,低版本看不到高版本的事务变更,从而实现了不同事务之间的数据隔离。是一种特殊的表级别锁。简言之,如果一个事务正在往表中插入记录,所有其他事务的插入必须等待,以便第一个事务插入的行, 是连续的主键值。写锁,给事务加上排它锁,该事务可以执行任意读写操作,其他事务无法获取该排它锁,也不能加其他类型的锁。保证并发场景下,使用RC高过RR,RC的锁的粒度是只有一行,RR是多行的锁。原创 2024-02-09 08:43:47 · 1011 阅读 · 0 评论 -
分库分表方案
通常情况下,当我们对order表进行分表的时候,比如我们要分成128张表的话,那么得到的128表应该是:order_0000、order_0001、order_0002.....order_0126、order_0127。比如表中有一万条数据,我们拆分为两张表,id 为奇数的:1,3,5,7……放在 user1 中, id 为偶数的:2,4,6,8。这就是分表算法要做的事情了,但是不管什么算法,我们都需要确保一个前提,那就是同一个分表字段,经过这个算法处理后,得到的结果一定是一致的,不可变的。原创 2023-04-12 14:45:44 · 590 阅读 · 0 评论 -
mysql in和exist区别,以及优化
假设子表数据量大,外表数据量小。优先使用exist。假设子表数据量小,外表数据量大。exist优先查询外表,再查子表。优化原则:数据量小的表驱动数据量大的表。in优先查询子表,再匹配外表。原创 2023-04-07 16:02:09 · 327 阅读 · 1 评论 -
mysql 平衡二叉树、B树、B+树
(2)子节点数:非叶节点(根节点和枝节点)的子节点数 >1、且子节点数量<=M 、且M>=2,空树除外(注:M阶代表一个树节点最多有多少个查找路径,M=M路,当M=2则是2叉树,M=3则是3叉);(3)关键字数:枝节点的关键字数量大于等于ceil(m/2)-1个且小于等于M-1个(注:ceil()是个朝正无穷方向取整的函数 如ceil(1.1)结果为2);B+树索引的所有数据均存储在叶子节点,而且数据是按照顺序排列的,并且以双向链表进行存储。(1)、非叶子节点不能超过两个子节点,且可以存储键值对。原创 2023-04-07 15:45:52 · 85 阅读 · 0 评论 -
Mysql事务ACID和隔离级别
解决方法:通过事务隔离级别去解决,以下四个隔离级别需要对应的数据库引擎自己支持,而不是spring本身去支持,spring只是整合使用而言。虚读/幻读:当前事务中,同一条sql,多次查询,前后结果记录数不一致,有可能多了,也有可能少了。脏读和不可重复读的区别:脏读读到的是未提交的数据,而不可重复读读到的是已经提交的数据。不可重复读和虚读/幻读的区别:不可重复读侧重于修改,虚读/幻读侧重的是新增/删除。脏读:当前事务可以读到另一个事务未提交的数据。原因:并发事务导致的脏读,不可重复读,幻读。原创 2020-03-09 03:58:32 · 472 阅读 · 1 评论 -
mysql索引失效
索引失效场景原创 2020-03-13 16:16:54 · 496 阅读 · 0 评论 -
mysql锁
原创 2020-03-13 14:25:24 · 338 阅读 · 1 评论