Java面试中经常被问到的问题有哪些?

开课吧开课吧锤锤2021-02-26 17:22

点赞
有用
分享分享

    Java是一门面向对象的编程语言,所以Java并不是最容易入手的开发语言,根据这个特性,开课吧广场为大家提供关于Java语言的面试教程,助大家快速学习。

Java

MySQL给离散度低的字段建立索引会出现什么问题,具体说下原因?

    先上结论:重复性较强的字段,不适合添加索引。MySQL给离散度低的字段,比如性别设置索引,再以性别作为条件进行查询反而会更慢。

    一个表可能会涉及两个数据结构(文件),一个是表本身,存放表中的数据,另一个是索引。索引是什么?它就是把一个或几个字段(组合索引)按规律排列起来,再附上该字段所在行数据的物理地址(位于表中)。比如我们有个字段是年龄,如果要选取某个年龄段的所有行,那么一般情况下可能需要进行一次全表扫描。但如果以这个年龄段建个索引,那么索引中会按年龄值根据特定数据结构建一个排列,这样在索引中就能迅速定位,不需要进行全表扫描。为什么性别不适合建索引呢?因为访问索引需要付出额外的IO开销,从索引中拿到的只是地址,要想真正访问到数据还是要对表进行一次IO。假如你要从表的100万行数据中取几个数据,那么利用索引迅速定位,访问索引的这IO开销就非常值了。但如果是从100万行数据中取50万行数据,就比如性别字段,那你相对需要访问50万次索引,再访问50万次表,加起来的开销并不会比直接对表进行一次完整扫描小。

    当然如果把性别字段设为表的聚集索引,那么就肯定能加快大约一半该字段的查询速度了。聚集索引指的是表本身数据按哪个字段的值来进行排序。因此,聚集索引只能有一个,而且使用聚集索引不会付出额外IO开销。当然你得能舍得把聚集索引这么宝贵资源用到性别字段上。

    可以根据业务场景需要,将性别和其它字段建立联合索引,比如时间戳,但是建立索引记得把时间戳字段放在性别前面。

    以上就是本次Java面试的全部内容,更多Java面试资料,请点击下方图片即可免费领取。

Java

    一份资料可以帮助您提升技术,提高面试成功率,好的选择成就最好的自己。

有用
分享