面试题汇总——mysql常见面试题汇总
mysql能问的东西很多,就看人家怎么问了。
参考:https://blog.csdn.net/weixin_45483322/article/details/132390048#17_223
这个mysql经典面试题,截图参考常见的
MySQL 有哪些常见存储引擎?
存储引擎应该怎么选择?
InnoDB和MylSAM主要有什么区别?
MySQL日志文件有哪些?分别介绍下作用?
一条SQL 查询语句的执行顺序?
drop,delete与truncate的区别?
UNION 与 UNION ALL 的区别?
- 如果使用UNION,会在表链接后筛选掉重复的记录行
- 如果使用UNION ALL,不会合并重复的记录行
- 从效率上说,UNION ALL要比UNION快很多,如果合并没有刻意要删除重复行,那么就使用UNION All
count(1)、count(*)与count(列名)的区别?
执行效果:
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者 0,而是表示 null)的计数,即某个字段值为 NULL 时,不统计。
执行速度:
列名为主键,count(列名)会比 count(1)快
列名不为主键,count(1)会比 count(列名)快
如果表多个列并且没有主键,则 count(1)的执行效率优于 count(*)
如果有主键,则 select count(主键)的执行效率是最优的
如果表只有一个字段,则 select count(*)最优。
内连接、外连接、交叉连接、笛卡尔积呢?
内连接(inner join):取得两张表中满足存在连接匹配关系的记录。
外连接(outer join):不只取得两张表中满足存在连接匹配关系的记录,还包括某张表(或两张表)中不满足匹配关系的记录。
交叉连接(cross join):显示两张表所有记录–对应,没有匹配关系进行筛选,它是笛卡尔积在SQL中的实现,如果 A 表有 m 行,B 表有 n 行,那么 A 和 B 交叉连接的结果就有 m*n 行。
笛卡尔积:是数学中的一个概念,例如集合 A={a, b},集合 B={0, 1, 2},那么 AXB={<a, 0>, <a, 1>, <a, 2>, <b, 0>, <b, 1>, <b, 2>}。
那 MySQL 的内连接、左连接、右连接有有什么区别?
MySQL 的连接主要分为内连接和外连接,外连接常用的有左连接、右连接。
MySQL-joins-来源菜鸟教程
inner join内连接,在两张表进行连接查询时,只保留两张表中完全匹配的结果集
left join在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。
right join 在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。
==============================================================================
SQL 优化
慢 SQL 如何定位呢?
慢 SQL 的监控主要通过两个途径:
慢查询日志:开启MySQL 的慢查询日志,再通过一些工具比如 mysqldumpslow 去分析对应的慢查询日志,当然现在一般的云厂商都提供了可视化的平台。
服务监控:可以在业务的基建中加入对慢SQL的监控,常见的方案有字节码插桩、连接池扩展、ORM框架过程,对服务运行中的慢SQL进行监控和告警。
索引的分类
为什么使用索引会加快查询
创建索引有哪些注意点?
索引哪些情况下会失效呢?
==============================================================================
分组相关
参考:https://blog.csdn.net/qq_47699076/article/details/127946512
参考:https://blog.csdn.net/bjweimengshu/article/details/131842528