Mysql面试题1

依旧是:看到了就放这

1.

问题
统计行数count()、count(1)、count(column)的区别
答案
性能比较:count(
) = count(1) > count(column)
count()和count(1)两者的统计方式完全相同,包含null的行。
count(column) 如果列定义时不允许为null,那么统计满足查询条件的不为null的总行数。
在这里插入图片描述

2.

问题 慢查询怎么发现
参考:
https://www.cnblogs.com/zhncnblogs/p/13960137.html
https://www.cnblogs.com/qmfsun/p/4844472.html

3.

问题 delete删除的数据,这条数据的存储空间会得到释放吗
不会
在这里插入图片描述

4.

问题 drop trancate delete用法
答案
1.truncate是DDL,delete是DML命令,所以truncate命令更准确的说是修改表的定义(属性);
2.truncate不支持事务回滚,而delete支持事务回滚;

DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。

3.如果表的主键是自增的,那么使用truncate清空表后会初始化自增属性(重新从1开始自增);而delete删除所有数据后,主键自增属性不会被初始化,接着清除数据前的自增值继续自增。
4 表和索引所占空间
当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,
DELETE操作不会减少表或索引所占用的空间。
5应用范围
TRUNCATE 只能对TABLE; DELETE可以是table和view
6.drop语句将表所占用的空间全释放掉。TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。
参考:https://www.cnblogs.com/zhizhao/p/7825469.html 啊啊啊太多了背不上

5.

问题 vachar和char的区别
答案
1.都是字符串
2.大小不一样。char是255个字节,varchar是65535个字节
3.类型不一样。char是定长,varchar不定长

6.

问题:几种join的不同
答案
https://blog.csdn.net/weixin_45743799/article/details/105481811
1.Left Join (Left outer Join)左外连接:返回左表所有记录和右表种满足连接条件的记录
2.Right Join(Right outer Join)右外连接:返回右表种所有记录和左表种满足连接条件的疾苦
3.Full Join全外连接 :返回两个表的所有记录,没有匹配到的字段显示为空
4.Cross Join:返回两个表的笛卡尔乘积。不能使用“on”
5.JOIN or INNER JOIN(内连接) : 这两个是相同的,要求两边表同时有对应的数据,返回行,任何一边缺失数据就不显示。
6.natural join 自然连接
在这里插入图片描述
//以Left join为例
在这里插入图片描述

7

问题:什么时候行锁会被表锁
答案
事务的隔离级别为:可重复读时,
如果有索引(包括主键索引),以索引列为条件更新数据,会存在间隙锁,行锁,页锁,而锁住一些行。
如果没有索引,更新数据时会锁住整张表。

事务隔离级别为:串行化时,读写数据都会锁住整张表。(一次只能一个连接玩表)

8.

问题:组成
答案
在这里插入图片描述

9.

问题:索引未命中情况
答案
(1)范围问题,条件中出现这些符号或关键字:>、>=、<、<=、!= 、between…and…、like等,如果查询范围不明确,达不到优化效果。没有指定范围不会用到索引
(2)索引列不能参与计算,保持列“干净”。
在这里插入图片描述
(3)最左前缀匹配原则,非常重要的原则。不符合规范则不会命中索引。
对于组合索引mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配(指的是范围大了,有索引速度也慢)。
在这里插入图片描述

(4)使用函数不能命中索引
(5)类型不一致 如果列是字符串类型,传入条件是必须用引号引起来,不然…
(6)MySQL 不能在 ORDER BY 或 GROUP BY 中使用前缀索引,也不能把它们用作覆盖索引(Covering Index)。
(7)text类型,必须制定长度,否则无法命中:
补充一个:类似(4),左边有运算的情况下也不会使用索引,比如select * from t where c - 1 = 1000;

10

问题
mysql的数据类型
答案
https://www.runoob.com/mysql/mysql-data-types.html

11

问题
索引下推
答案
https://www.cnblogs.com/Chenjiabing/p/12600926.html

12

问题
explain的rows怎么算的
答案
索引系统是通过遍历部分数据,也就是通过采样的方式,来预测索引的基数的。
系统是通过索引的区分度来判断的,一个索引上不同的值越多,意味着出现相同数值的索引越少,意味着索引的区分度越高。区分度越高,基数越大。

这里我声明一下,系统判断是否走索引,扫描行数的预测其实只是原因之一,这条查询语句是否需要使用使用临时表、是否需要排序等也是会影响系统的选择的。

13

问题
b+树的查询复杂度,大规模数据大概要查多少次
答案
O(lognN),这里的n是非叶子结点的个数。

在实际的查询中,IO次数可能会更小,因为有可能会把部分用到的索引读取到内存中,相对于磁盘IO来说,内存的io消耗可以忽略不计。一般来说B+Tree的高度一般都在2-4层,MySQL的InnoDB存储引擎在设计时是将根节点常驻内存的,也就是说查找某一键值的行记录时最多只需要1~3次磁盘I/O操作(根节点的那次不算磁盘I/O)。

14

问题
一条语句执行的慢是什么原因
答案
https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485185&idx=1&sn=66ef08b4ab6af5757792223a83fc0d45&chksm=cea248caf9d5c1dc72ec8a281ec16aa3ec3e8066dbb252e27362438a26c33fbe842b0e0adf47&token=79317275&lang=zh_CN%23rd

15.

主键索引和唯一索引区别
在这里插入图片描述

16.

问题 Mysql char是字符数还是字节数?
答案 字符数。

17.

问题:左连接时on和where的区别
答案
https://blog.csdn.net/qq_39751320/article/details/106246940

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值