说一下mysql比较宏观的面试,具体咋写sql的这里就不过多举例了。后面我还会给出一个关于mysql面试优化的试题,这里主要说的索引和B+Tree结构,很少提到我们的集群配置优化方案。

1.索引是什么?有什么作用以及缺点

答:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。也可以理解为索引就是一本书的目录,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚集索引那么需要的空间就会更大。

2.索引的目的是什么

答:为了高效的查找得到我们所需要的数据,减少分组和排序时间,提高我们的mysql的性能

3.索引对数据库系统的负面影响

答:虽然索引对于数据库的查询提高了效率,但一定程度上增加了空间的占用,同时写入的速度降低了不少,和原有写入数据相比较,多了一步去维护索引的操作。

4.建立索引的原则

答:选择唯一性索引,为经常需要查询、排序、分组和联合操作的字段建立索引,限制索引的数目,最左前缀匹配原则(非常重要的原则),尽量选择区分度高的列作为索引,字段尽力设置不为null,索引列上不计算。

5.主键、外键和唯一索引的区别

答: 定义:

主键:唯一标识一条记录,不能有重复的,不允许为空

外键:表的外键是另一表的主键, 外键可以有重复的, 可以是空值

索引:该字段没有重复值,但可以有一个空值

作用:

主键:用来保证数据完整性

外键:用来和其他表建立联系用的

索引:是提高查询排序的速度

个数:

主键:主键只能有一个

外键:一个表可以有多个外键

索引:一个表可以有多个唯一索引

6.MySQL底层实现,MySQL有什么引擎

答:mysql底层采用B+tree的存储结构,也就是只有叶子节点携带真实数据,每个节点大小为16Kb,大致三层的B+tree就可以存2000W左右的数据,大大的减少了磁盘的IO。我们常见的存储引擎有InnoDB和MyISAM。

7.InnoDB和MyISAM区别,InnoDB替代了MyISAM,那么MyISAM是否一无是处。

答:InnoDB支持事务,支持行锁,在磁盘上只存两个文件,一个是索引文件,另一个是数据文件,在B+Tree的主键索引上,叶子节点携带全部数据,MyISAM不支持事务,不支持行锁,磁盘上存了三个文件,一个是索引文件,另一个是数据文件,还有一个存放的对应关系文件,从查询的角度来说,InnoDB没有MyISAM的单条查询速度高,MyISAM采用Hash存储回行得到数据的查询过程,单MyISAM对于范围查询不是很友好。因此我们可以看出InnoDB用的更广一些,但同时MyISAM对于非范围查询的高效还是有很大用处的,而且MyISAM对于表内的总数查询,维护了单独的数据,也是很高效的。

8.什么是事务,事务特性

答:事务是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。在我们的mysql里也是如此,也就是我们的ACID原则。A原子性,把一系列的动作视为一个最小的操作(原子操作)C一致性,从一个状态到另一个状态是一致的,I隔离性:事务与事务之间是不可见相互隔离的,D持久性:一旦事务提交,则所做修改就会被永久保存到数据库中。可以简单说一下可重复读的MVCC机制,面试官也懵圈。

9.如何设计一个高并发的系统(对于mysql来讲)

答:这个后面会结合别的技术来说,只讲mysql不太好说。大致就是我们首先应该考虑到的是读写分离操作(过几天博客里会详细说这个),再就是我们常见的分库分表操作,水平切分垂直切分。还可以加入缓存redis操作。合理使用索引,explain进行sql优化。

10.锁的优化策略

答:优化,也就是最小力度的锁我们的数据,也就是行锁,InnoDB的行锁其实是加在索引字段的,避免行锁的升级为表锁,再就是我们尽量避免间隙锁,尽量避免我们的范围修改,如果真的必须范围修改,那么我应该尽可能的缩小到最小的范围。

11.优化SQL的方法

答:设置一个主键索引,需主要主键索引一般没有真正业务含义,使用int类型自动增长的,而且不能为null,非主键索引字段优先考虑区分度高的业务情况和最左前缀原则,设置为null。如果真的数据量不大,不建议加索引,反而会影响效率的。选取最适用的字段属性,尽可能减少定义字段宽度,尽量把字段设置NOTNULL, 使用连接(JOIN)来代替子查询,适用联合(UNION)来代替手动创建的临时表。学会使用explain进行SQL分析,实在不行可以打开trace进行分析SQL情况,用完记得关闭。

12.谈谈三大范式,什么时候使用反范式设计

答: 第一范式(1NF):确保每列保持原子性即列不可分

第二范式(2NF):属性完全依赖于主键,也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

第三范式(3NF):属性和主键不能间接相关(减少数据冗余,这样就可以通过主外键进行表之间连接)

比如我们表比较多,需要关联时,但我们的A表只需要关联B表的一个字段,而且每次都需要关联查询你,这时我们可以采用A表放置一个冗余字段来存B表的那个字段。这个操作其实就是一个反范式的。

13.说几个mysql中你常用的函数

答:sum、count 、avg、min、max

14.varchar(100)和varchar(200)的区别

答:占用内存空间大小肯定是不一致的,但是占用我们磁盘的大小是一致的,我们存储字符串"abc",完全是一样的磁盘空间,但是对于varchar(100)来说,接收到的字符串长度太长了就会报错的。后面的数字代表可存储的字节数。

15.varchar(20)和int(20)中的20含义一样吗

答:显然不一致, int(M) M表示的不是数据的最大长度,只是数据宽度,并不影响存储多少位长度的数据;varchar(M) M表示的是varchar类型数据在数据库中存储的最大长度,超过则不存;

16 .如何开启慢日志查询?

答: 有2种方式,一是修改mysql的配置文件,二是通过set global语句来实现。slow_query_log = ON,打开日志,long_query_time = 2,设置时间,2秒就算是慢查询,然后重启mysql服务即可,进入mysql控制台,输入SET GLOBAL slow_query_log = 'ON';SET GLOBAL long_query_time = X;不需要重启服务就可以得到慢查询日志。

总结一下:

只要我们熟知,我们mysql的底层是B+tree的,B+tree是什么样子的,很多面试题都是围绕这个东西来出题的,为什么不为空,空不好找B+tree的位置啊等等。再就是我们要学会使用Explain来分析sql,有的时候即使有覆盖索引,mysql也不一定去走的,他内部底层会判断走这个索引的代价。可以自行尝试。然后就是我们的事务,也是很重要的一部分。总之不管他怎么问我们,我们真的理解了其中的原理,就算是题再怎么变化,也脱离不了底层原理的,我们要学会加法,而不是要学会1+1。

阿里 mysql 架构_阿里java架构教你怎么用mysql怒怼面试官相关推荐

  1. mysql 左连接b表的一条数据_阿里java架构师教你怎么用mysql怒怼面试官

    转载地址: 阿里java架构教你怎么用mysql怒怼面试官​www.jianshu.com 说一下mysql比较宏观的面试,具体咋写sql的这里就不过多举例了.后面我还会给出一个关于mysql面试优化 ...

  2. mysql中括号_【Java程序猿必备系列】MySQL知识点总结

    点击 隔壁王小猿 关注公众号获取更多精彩JAVA文章 1.数据库的组成 2.MySQL数据类型 MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 2.1 数值类型 My ...

  3. 阿里云自动java和mysql数据库_阿里云服务器之基于Linux系统部署上线JavaWeb项目和连接MySQL数据库(从购买云服务器到发布JavaWeb项目全套详细流程)...

    阿里云服务器之基于Linux系统部署上线JavaWeb项目和连接MySQL数据库(从购买云服务器到发布JavaWeb项目全套详细流程) (仅此纪念人生第一篇学习博客) 前阵子接了一个小小的JavaWe ...

  4. 阿里 P9 整理出:Java 架构师“成长笔记”共计 23 版块

    阿里巴巴一位 P9 级架构师总结出的共计 23 版块的 Java 架构师"成长笔记",一经发布就受到了众多 Java 程序员同学的追捧,这份"成长笔记"涵盖了: ...

  5. 阿里mysql密码_阿里云自带mysql 密码

    阿里云服务器部署Java Web项目和连接MySQL数据库全流程 前阵子接了一个小小的JavaWeb项目,按照需求得发布上线到云服务器,同时为了更熟悉JavaWeb开发的整个流程,所以买了个阿里云服务 ...

  6. aliyun mysql 端口_阿里云怎么查看数据库端口怎么设置

    阿里云怎么查看数据库端口怎么设置,阿里云服务器数据库. 在阿里云ecs云服务器上部署数据库后,在平常的操作中可能会遇到些问题,可以先做个大致的了解: 如果您想看更多的在ecs上的数据库的相关操作,请前 ...

  7. 阿里云mysql 连接数_阿里云mysql最大连接数

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. 阿里云怎样操作mysql数据库_阿里云主机如何操作mysql数据库

    阿里云主机如何操作mysql数据库,阿里云上传mysql数据库. 在阿里云ecs云服务器上部署数据库后,在平常的操作中可能会遇到些问题,可以先做个大致的了解: 如果您想看更多的在ecs上的数据库的相关 ...

  9. mysql 回档_阿里云mysql回档

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

最新文章

  1. 近期活动盘点:首期AI Time PhD:清北师兄分享前沿研究成果、“科技驱动,正向创新”医工结合高峰论坛...
  2. Sencha Touch 2 DataView / List 分页
  3. CoinEx将于8月6日开启Spice加速器申购
  4. 【Redis】16.Redis哨兵
  5. 【模板】吉老师线段树
  6. stomp java客户端_Stomp-Spring服务器端的Web套接字Java客户端
  7. Linux NTP服务配置 for Oracle RAC
  8. S60第三版软件批量签名助手下载
  9. fpga挂一片ddr2_FPGA片外存储器之DDR2控制器2
  10. mysql常见报错及问题排查
  11. 华为模拟器linux,华为模拟器命令.doc
  12. 2021年房地产经纪行业发展研究报告
  13. 搜狗语音云开发入门(二)——使用离线语音识别服务
  14. Android获取分辨率和像素密度
  15. MySQL技术:数据库逻辑结构单元
  16. ISA-95/B2MML教程 : 从用例到XML消息的整合实践
  17. 北风修仙笔记—2020年3月
  18. VSCode(Visual Studio Code)整合Git
  19. 数据结构之链表(Studing Play with DataStruct)
  20. 阿里云服务器证书登录如何配置

热门文章

  1. java如何按照标签替换_Maven(五):resources、profiles标签的实践
  2. Linux之不删除指定文件夹,其他都删(文件和文件夹)
  3. linux下使用free命令查看实际内存占用
  4. 《QML除夕烟花,代码全平台可用》
  5. 分布式锁能解决 mysql死锁吗_mysql死锁问题分析
  6. 用python解算法谜题_编程的乐趣 用Python解算法谜题
  7. mysql8.0查看用户_MySQL 8.0用户及安全管理
  8. python第三方库使用文档_python 的第三方库的使用
  9. 用lisp编写串口助手源代码_实战用python来写个串口助手--界面篇
  10. python写扫雷脚本_Python自动扫雷实现方法