mysql
我是一只代码狗
学习it我总结了五个字,听,问,看,想,敲
展开
-
什么是mysql的数据归档
就是把不用的数据,查询出来,然后保存到备份数据库。转载 2024-04-22 16:49:07 · 13 阅读 · 0 评论 -
20万并发,秒杀一个库存只有100的商品,你会怎么设计
9.假设我们没有那么多的机器,我们可以先在查询redis之后,把数据发送给mq,先告知用户在处理中,请稍后查看通知。10.然后所有的请求都在mq中排队,这时候在慢慢的去处理mq的消息,去做库存的扣减,扣减成功之后,通知用户秒杀成功。8.假设我们的服务一台能抗住2000的并发,那么我们就需要部署100台机器,结合nginx做负载均衡。11.当库存扣减没了,mq就不在接收消息,剩余的mq消息,直接释放,通知用户秒杀失败。4.使用分布式锁,锁住资源,防止超卖,在代码中先查询库存是否够用。转载 2024-03-04 21:03:43 · 32 阅读 · 0 评论 -
mysql能抗住的并发是多少
1000。转载 2024-03-04 20:08:27 · 39 阅读 · 0 评论 -
查询出多个班级内最大、最小、第二大的同学的信息,一条sql完成
id` int NOT NULL AUTO_INCREMENT COMMENT '主键',`banji` varchar(10) DEFAULT NULL COMMENT '班级',`score` int DEFAULT NULL COMMENT '成绩',`name` varchar(10) DEFAULT NULL COMMENT '学生姓名',原创 2024-03-03 12:08:00 · 846 阅读 · 0 评论 -
水平拆分和垂直拆分用于什么场景
那么我们可以进行垂直拆分,1个表的多个字段,拆分成多个表,每个表使用不同的字段。按照日期的维度去分表,表结构一样,按照日期不同,存储的数据也不同。比如说在查询列表的时候,只需要几个字段,在详情界面,需要很多字段。比如说每天新增100万订单的数据,那么我们就进行水平拆分。原创 2024-03-02 15:37:44 · 650 阅读 · 0 评论 -
select * from 表 c=‘1‘ and b=‘2‘ and a=‘3‘; abc是联合索引,这样查询会命中索引吗?
会命中索引原创 2024-02-28 18:22:22 · 761 阅读 · 2 评论 -
select * from 表 where a=1 and c=1; abc是联合索引,这样查询会命中索引吗?
会命中索引原创 2024-02-28 18:19:47 · 383 阅读 · 0 评论 -
水平拆分和垂直拆分的区别
垂直拆分就是数据库分成多个,把一个表的多个字段,分成多个表,每个表使用不同的字段。水平拆分就是表结构相同,存储的数据不同。转载 2024-02-27 22:39:55 · 29 阅读 · 0 评论 -
b+树的时间复杂度
b+树会先从根节点开始往下找到叶子节点,查找过程类似二分查找,每次查询都能缩小查询范围的一半,所以时间复杂度是O(logn)转载 2024-02-25 13:52:03 · 344 阅读 · 0 评论 -
查询执行计划的时候,你会关注那些字段
select_type,table,type,key,rows,Extra原创 2024-02-25 12:48:03 · 349 阅读 · 0 评论 -
select a,b,c from 表 where b=1 and c=1; abc是联合索引,这样查询会命中索引吗?
如果select 只显示索引列 那么会命中索引如果select * 那么不会走索引,会查全表原创 2024-02-25 12:34:41 · 582 阅读 · 0 评论 -
什么是回表
就是从非聚簇索引查询不到,需要非聚簇索引的叶子节点拿到主键值。然后去聚簇索引里面找到叶子节点的行记录,就是回表。转载 2024-02-13 19:53:14 · 24 阅读 · 0 评论 -
什么是索引下推
就是先进行条件过滤,然后再根据索引列进行查询,这样就可以减少回表操作。转载 2024-02-13 19:39:40 · 30 阅读 · 0 评论 -
订单表每天新增500w数据,分库分表如何设计?
4.使用orderId(订单id)当做分片键,使用一致性hash算法来分配,要插入到那个数据库的那个表中。3.那么需要使用32个库,每个库32张表,那么一共就是1024张表,每个表存500万数据。5.当订单的数据超过了2年,那么使用冷热分离的方案或者使用tidb在线扩容数据库来解决。6.热库数据保留一年,1年以后迁移到冷库,冷库保存2年,2年后,进行数据归档。1.1天500万,那么1年就是18亿,我们按照2年的增量来算就是大概40亿。2.在预留一些空间,按照50亿来算。转载 2024-02-13 19:13:40 · 104 阅读 · 0 评论 -
mysql如何解决幻读问题
2.如果事物存在当前读,那么需要mvcc和加锁(表锁,行数,间隙锁)来解决。1.如果事物不存在当前读,那么可以使用mvcc解决。转载 2024-02-13 17:38:03 · 42 阅读 · 0 评论 -
mysql索引的优缺点
1.优点是减少磁盘io的次数,提升查询效率,在范围查询的时候,效率比较高,通过唯一索引,保证每一行数据的唯一性。2.缺点是在增删改的时候,需要进行索引的维护,带来性能的开销,索引过多,会造成维护成本过高。转载 2024-02-13 15:06:06 · 33 阅读 · 0 评论 -
mysql update是行锁还是表锁?
如果where条件包含了索引列,并且更新一条数据就是行数。如果where条件没有包含索引列,那么就是表锁。转载 2024-02-13 13:35:36 · 52 阅读 · 0 评论 -
binlog和redolog的区别
3.binlog用来做数据备份,主从同步,数据恢复,redolog把未提交的事物进行回滚,把已提交的事物持久化到磁盘。2.binlog是记录增删改,redolog记录数据页发生的变化。1.binlog是server层,redolog是存储引擎层。转载 2024-02-13 11:34:03 · 74 阅读 · 0 评论 -
你的项目中是怎么防止sql注入的?
1.使用mybatis的#,他是参数占位符,对sql进行预编译处理,不会直接拼到sql后面,这样就可以防止sql注入。3.使用nginx进行反向代理,在nginx的配置中设置if判断的代码,如果不符合直接返回错误的界面。2.使用过滤器,对参数过滤掉敏感的词汇。转载 2024-02-05 13:12:06 · 26 阅读 · 0 评论 -
mysql怎么存储ip地址
可以使用varchar或者int。通过mysql内置函数进行转换。-- int 转换成ip 地址。-- Ip地址转成int。转载 2024-01-29 20:55:37 · 36 阅读 · 0 评论 -
count(*)和count(字段)的区别
count(*)返回所有行数,count(字段)不包含null值。原创 2024-01-29 20:48:41 · 402 阅读 · 0 评论 -
Innodb和Myisam的区别?
Innodb的索引和数据存储在一起,Myisam 分开存储。Innodb支持事物,外键,行锁,Myisam 不支持。转载 2024-01-29 20:30:57 · 52 阅读 · 0 评论 -
mysql主键自增到头了怎么办
因为当数据达到了6百万的时候,我们就已经设置了分库分表。mysql自增到头了,会重新从1开始。但是我们是不会让他自增到头的。转载 2024-01-25 20:33:48 · 51 阅读 · 0 评论 -
mysql索引有哪些
普通索引,主键索引,唯一索引,联合索引。转载 2024-01-25 20:29:02 · 43 阅读 · 0 评论 -
b树和b+树的区别
1.b树的节点都是存储完整的行记录,而b+树非叶子节点存储索引值和指针,叶子节点存储行记录。3.b树的树高度非常高,而b+树的高度最高3层或者4层。2.b树不支持范围查询,b+树支持范围查询。转载 2024-01-22 01:41:44 · 86 阅读 · 1 评论 -
mysql底层运行机制
7. 当server层的binlog的数据写入成功之后,binlog会给引擎层的redolog发送一个commit的提交标记,来保证数据的一致性。8. 当事务提交后,mysql会在后台通过一个io线程,来进行随机的刷盘,把内存(buffer pool缓存池)的数据写入到磁盘。执行器: 判断这个表有没有对应的权限,如果有就去查询每一行,把符合条件的放入结果集,然后调用表结构对应的执行引擎。5. 当redolog缓冲区的数据达到一定量的时候,就会准备提交事务,把redolog的数据写入到磁盘中。转载 2024-01-04 14:17:01 · 31 阅读 · 0 评论 -
mysql的最大连接数是多少
使用下面的命令查看,可以看到默认是151个连接数。再次查看,可以发现,最多只能设置10万的连接数。可以通过下面的命令进行修改。转载 2023-12-31 17:10:55 · 156 阅读 · 0 评论 -
springboot3.0+spring security6+oauth2+vue3整合单点登陆(sso)
springboot3.0使用jdk17redis提前安装好。转载 2023-12-31 09:25:08 · 863 阅读 · 0 评论 -
mysql 显式rowid和隐藏主键
磁盘页数据使用dynamic格式记录行。转载 2023-12-21 08:00:49 · 226 阅读 · 0 评论 -
mysql中varchar最大长度
所用表类型(不包括BLOB)的最大行大小为65535。这包括存储开销,请参阅手册。Data_length: 存储多少个字节,16384就是16kb,也就是在磁盘行中存储一页数据。Auto_increment: 就是当前主键自增到哪里了。65536(字节)/1024(字节)=64kb 也就是。index_length: 索引存储的字节数。Row_format: 存储行记录的格式。长度根据字符集不同,存储的长度也不一样。Collation: 表的字符集格式。Rows: 当前一共有多少行记录。转载 2023-12-21 05:31:03 · 107 阅读 · 0 评论 -
mysql慢查询
可以看到这条sql超过了1秒,那么就会记录到慢日志中。可以看到这里就是慢sql的数据。#记录没有使用索引的查询sql。这就是对sql的一种优化手段。#慢查询日志存放的位置。#慢查询超过1秒才记录。转载 2023-12-13 20:07:33 · 42 阅读 · 0 评论 -
mysql中的mvcc多版本并发控制
假设当前head节点是101,比max_id还大,事务还没开始,数据不可见,去找11,发现不可见,那么往下一直找,最后找到了5并返回。假设当前head节点是11,在未提交的事务数组中,数据不可见,去5这个事务id查询,返回对应的结果。假设当前head节点是5,根据对比规则,事务可见,返回5这个事务id的查询数据。[事务id1,事务id2,事务id3,事务id4],max_id。假设在未提交事务数组中的事务id最小值为min_id。事务id是自增的,但是在版本链上可能是乱序的。转载 2023-11-28 00:25:37 · 67 阅读 · 0 评论 -
mysql事务的acid和隔离级别
INSERT INTO `biao` (`id`, `num`, `name`) VALUES (1, 100, '张三');两个事务同时对一条sql进行修改,后面的sql覆盖了前面的sql,前面的sql修改的结果丢失,这就是脏写。如果A事务出现新增,并且提交事务,B事务再次查询就会产生幻读,多出来一行数据。B事务查询,还是只有1条数据,每次读取的都是一样的,这就是可重复读。在一个事务内,每次读取到的数据都是不一样的,不符合事务的隔离性。当A事务还没提交之前,B事务查询的还是之前的num=100。转载 2023-11-21 21:14:52 · 86 阅读 · 0 评论 -
mysql聚簇索引和非聚簇索引
聚簇索引就是主键索引,也叫一级索引,叶子节点存储完整的行记录非聚簇索引就是除了主键外的其他的索引,也叫二级索引,叶子节点存储索引值和主键,如果需要查询完整的行记录,就需要回表进行操作回表就是拿到了二级索引的主键值,在去聚簇索引这个b+树中,从根节点开始,找到叶子节点的位置,取出行记录的信息name索引树(二级索引) ,叶子节点会存储主键主键b+树(主键索引,聚簇索引,一级索引),叶子节点会存储完整的行记录转载 2023-11-13 22:56:50 · 69 阅读 · 0 评论 -
mrr多范围读取
10*32=320次io,所以随机io 就是查询效率差,这也是为啥索引失效的原因之一。也就会产生随机io,那么假如注解是10个,存在10个页目录中,那么计算io次数。当主键存在多个,并且都不在一个页目录中,那么就需要进行多个磁盘查询,如果最大值主键和最小值主键在相邻的两个目录,那么2*32=64次io。如果最大值主键和最小值主键是在一个页目录,那么1*32=32次io。也就是会先进行二级索引查询,拿到主键值,在根据主键值进行回表操作。,就是会先查询二级索引,把主键值拿到,把这些主键进行排序。转载 2023-11-13 22:11:03 · 32 阅读 · 0 评论 -
mysql中的哈希索引
哈希冲突就是hash计算会存在相同的值,在数组后面追加链表把相同的值放入链表中。当一个表或者索引的一列使用的查询频繁,那么就会把值放入缓存中。底层结构是数组+链表,使用链表就是为了解决哈希冲突。mysql的哈希索引是不对外开放的,只有内部使用。当使用的时候,通过hash计算,返回对应的结果。转载 2023-11-13 21:47:40 · 25 阅读 · 0 评论 -
mysql单表底层是怎么优化的
mysql单表查询成本计算转载 2023-11-05 16:58:13 · 74 阅读 · 0 评论 -
mysql最左匹配原则
当where 条件是name=张三 and age>18的时候 and fen=100的时候。当where条件 是name=张三 and age=18 and fen=100的时候。从索引树根节点开始,name字段匹配上了,但是第二个位置是age,所以无法匹配。从索引树根节点开始,三个位置的数据都匹配上了,这时候才匹配了索引。当你的where条件 age=18 ,那么从索引树根节点开始找。开头的字段是name ,所以无法匹配,索引失效,走全表查询。从左到右都是有序的,左边的值小,右边的值大。转载 2023-10-29 17:22:58 · 156 阅读 · 0 评论 -
mysql的innodb存储引擎为啥选择b+树索引结构?
假设我们使用数组+链表的方式,对数组进行hash计算,数组的长度是8,那么hash一次,就是对数组的长度取余,也就是 数据值%8=放入索引的位置,10%8=2,也就是10放入索引2的位置。,data存储这个主键对应的一行数据,而且key的值 是不能重复的,适合精确查询,但是在范围查询的时候,需要多次回表操作,就是需要从新 从根节点开始,一点点去往下找。二叉树的特点就是,比根节点小的放在左子树,比根节点小的放在右子树,比根节点大的放在右子树,查找的时候可以一半的时间进行查询,但是在最差的情况下,转载 2023-10-21 22:22:27 · 87 阅读 · 0 评论 -
mysql的b+树最高有几层
mysql的io就是从磁盘上读取数据写入到内存,这是一次io操作,从内存中读取数据写入到磁盘,也是一次io操作。转载 2023-10-11 23:11:05 · 896 阅读 · 0 评论