MySQL常用易忘个人总结

1。每一页大小为16K
1G大概10亿个比特

explain :

key 所用到的索引

row 这次查询所扫描的行数(时机上为内循环数)

type:连接类型

mysql的锁

根本上上是要保证加锁的顺序。

InnoDB做了死锁预防的策略:持有事务锁(行锁、表锁),可以等待获取页面锁;但反之,持有页面锁,不能等待持有事务锁。根据死锁预防策略,在持有页面锁,加行锁的时候,如果行锁需要等待。则释放页面锁,然后等待行锁。此时,行锁获取没有任何锁保护,因此加上行锁之后,记录可能已经被并发修改。
————————————————
版权声明:本文为CSDN博主「weixin_39608680」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39608680/article/details/113126180

in/not in exists/not exists 区别?,是否走索引?

in与exists的区别:

  1. not in 要保证子查询的匹配字段是非空的,否则会导致not in返回整个结果集为空
  2. 语法不同

alt

alt
not in 的快速扫描全表也就比遍历快一点。使用 left join 或 not exists 来优化 not in 操作

因为insert语句对于主键来说,插入的行不管有没有存在,都会只有行锁。

insert...on duplicate key update...
防止互相gap导致的死锁

多个索引冲突的时候只有一个数据修改

行级锁不是锁记录,而是锁索引。

如果一条sql语句操作了主键索引,MySQL就会锁定这条主键索引;如果一条语句操作了非主键索引,MySQL会先锁定该非主键索引,再锁定相关的主键索引

alt

重构索引:
如果频繁的删除导致数据过于稀疏
用declear命令看扫描粒度
rebuild

with [名字] as ( select... ) :定义一个sql语句片段

over关键字:over(partition by columnname1 order by columnname2),不能单独使用,要跟四个排序函数一起使用
一、ROW_NUMBER():序号 连续 不重复
alt

二、rank():要求排序的值相同的归为一组且每组序号一样,排序不会连续执行
alt

三、dense_rank(): 排序是连续的,也会把相同的值分为一组且每组排序号一样(可以和rank()对比记)

四、ntile():Ntile(group_num) 将所有记录分成group_num个组,每组序号一样
alt

#猿辅导##产品##笔试题目#
全部评论
m
点赞 回复
分享
发布于 2019-10-06 11:46
10月还有笔试呀?
点赞 回复
分享
发布于 2019-10-10 12:26
小红书
校招火热招聘中
官网直投
许久了也没捞起来,也不告诉我挂了
点赞 回复
分享
发布于 2019-10-15 15:47

相关推荐

头像
点赞 评论 收藏
转发
2 14 评论
分享
牛客网
牛客企业服务