LEN

Mysql 的面试有关的总结
昨天去一家上市公司面试 ,本人是php 但是php说实话也就一般水平,但是在北京工作一年时间,对mysql用的比较...
扫描右侧二维码阅读全文
09
2016/06

Mysql 的面试有关的总结

昨天去一家上市公司面试 ,本人是php 但是php说实话也就一般水平,但是在北京工作一年时间,对mysql用的比较多.
平时也看过一些技术文,所以mysql算是我的强项吧.
但是说来惭愧,还是了解的不够细致,也是半桶水而已呀! 每次面试都相当于一次学习知道自己的不足,和对方公司的需求在哪里.
嗯,这次离职后我只找了三天工作 ,自己也写了张表统计了,自己的表现和对方公司的软硬实力.
感觉自己表现最好最能体现自身价值的就是免得这家公司,具体就不说了这家公司找对象比较方便,我就投了他家简历.
本想做大数据方向 ,但是学历和工作经验不合格 拉钩上直接返回不通过………. 大公司也一样,英语也是硬伤呀.

闲话少说,mysql 面试中遇到的困难问题

  1. 联表查询的优化处理
    两张表 user 20w 条记录 msg 100w条记录

    select * from user where uid in(select uid from msg where to_uid = 4000100)

    我当时写的是,不推荐联表,建议分两个sql 去循环遍历输出结果.
    面试官说不联表是好习惯,但是分两次查询就会建立两次连接,每次连接都是非常耗费时间的.
    这种说法我感觉很奇怪,因为创建一次连接后面在查询两次就可以呀 创建连接只需要一次呀.(先放着)
    那么应该怎么去写他的sql呢 我说那就只能联表了,left join 但使用left join 或者right join 都会造成数据部分丢失 不完整.
    那么只能 直接 join 连接了,那么问题来了 使用join 直接联表 应该那张表放前面, 嗯 表数据少的 放在前面,这样查询速度比较快

    select u.* from user u join msg m on u.uid = m.mid where m.to_uid = 4000100

  2. 字段插入问题
    第二个面试官面我的时候已经下午4.30了,终于要开始了.这个算是二面吧 ,我已开始以为是人事呢,还在想人事为什么是个男的??
    结果问了很多mysql的问题,问的更加深入,比较多的是mysql数据库如何做优化, 索引的使用和创建修改问题
    问了我一个问题
    表字段类型为char 类型 我插入的时候 直接插入 int 类型 没有加引号,会报错吗? 我说 不会报错
    又问 表字段类型为int 类型 插入字符串类型 会发生什么? 我说应该会插入0
    最后他说我有一个没说对,经过我回家实测

    insert into index (char,int) VALUES (12123132,'1213asd')

在命令行下操作: 第一个会根据固定长度截取保存,第二个int 会转换为整型做保存,两者插入时都不会报错

  1. 索引

    这个问题是最最恶心的,就是问我都说索引快,但是为什么快呢,如果说有100w条数据,那么就建立了100w条索引这有什么快的呢,不是还需要找一百条吗?
    我当时先回答就想书的目录一样,通过目录我们可以快速定位(好low的答案)
    面试官显然不想听这个东东
    我又说**innodb** 和 **myisam** 引擎的存储结构都是树状的,都是B+tree 形式保存
    也就是二分法往下查找,最底部保存的内容.
    上面的答案并不能让面试官满意 我有给出答案 每个索引背后都有一个指针指向数据地址,说的不是很准确但也已经达到点子上了.
    

今天查了一下:

一般地,系统访问数据库中的数据,可以使用两种方法:表扫描和索引查找。

    第一种方法是表扫描,就是指系统将指针放置在该表的表头数据所在的数据页上,然后按照数据页的排列顺序,
    一页一页地从前向后扫描该表数据所占有的全部数据页,直至扫描完表中的全部记录。 
    在扫描时,如果找到符合查询条件的记录,那么就将这条记录挑选出来。
    最后,将全部挑选出来符合查询语句条件的记录显示出来。

    第二种方法是使用索引查找。索引是一种树状结构,其中存储了关键字和指向包含关键字所在记录的数据页的指针。
    当使用索引查找时,系统沿着索引的树状结构,根据索引中关键字和指针,找到符合查询条件的的记录。
    最后,将全部查找到的符合查询语句条件的记录显示出来。

这句话的含金量很高呀!需要牢记

Last modification:February 15th, 2017 at 12:31 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment