[3]Java开发实习面试打卡

Posted Leida_wanglin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[3]Java开发实习面试打卡相关的知识,希望对你有一定的参考价值。

[2]Java开发实习面试打卡

1.创建索引的原则(重中之重)

最好符合以下几个原则:
1.最左前缀匹配原则,组合索引非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>,<,between,like)就停止匹配.
2.较频繁作为查询条件的字段才去创建索引
3.更新频繁字段不适合创建索引
4.若是不能有效区分数据的列不适合做索引列.
5.尽量的扩展索引,不要新建索引.比如表中有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可.
6.定义有外键的数据列一定要建立索引.
7.对于那些查询中很少涉及的列,重复值比较多的列不要建立索引.
8.对于定义为text,image和bit的数据类型的列不要建立索引.

2.创建索引的三种方式,删除索引

2.1. 第一种 CREATE TABLE

在执行CREATE TABLE时创建索引

CREATE TABLE user_index2 (
 id INT auto_increment PRIMARY KEY,
 first_name VARCHAR (16),
 last_name VARCHAR (16),
 id_card VARCHAR (18),
 information text,
 KEY name (first_name, last_name),
 FULLTEXT KEY (information),
 UNIQUE KEY (id_card)
);

2.2. 第二种 ALTER TABLE

使用ALTER TABLE命令去增加索引

ALTER TABLE table_name ADD INDEX index_name(column_list);

ALTER TABLE 用来创建普通索引,UNIQUE索引或PRIMARY KEY索引

2.3.第三种 CREATE INDEX

CREATE INDEX index_name ON table_name (column_list);

CREATE INDEX可对表增加普通索引或UNIQUE索引(不能创建PRIMARY KEY 索引)

2.4.删除索引

根据索引名删除普通索引,唯一索引,全文索引:
alter table 表名 drop KEY 索引名
删除主键索引:
alter table 表名 drop primary key(因为主键只有一个)

如果主键自增长,那么不能直接执行此操作(自增长依赖于主键索引);需要取消自增长再行删除,但通常不会删除主键.

3.创建索引时需要注意什么?

  • 非空字段:应该指定列为NOT NULL,除非你想存储NULL.在mysql中,含有空值的列很难进行查询优化,因为他们使得索引,索引的统计信息以及比较运算更加复杂.你应该用0、一个特殊的值或一个空串代替空值.
  • 取值离散大的字段:(变量各个取值之间的差异程度)的列放到联合索引的前面,可以通过count()函数查看字段的差异值,返回值越大说明字段的唯一值越多的字段的离散程度高.
  • 索引字段越小越好:数据库的数据存储以页为单位一页存储的数据越多一次IO操作获取的数据越大效率越高.

4.百万级别或以上的数据如何删除

1.可以先删除索引
2.然后删除其中无用数据
3.删除完成后重新创建索引

5.B树和B+树的区别

  • 在B树中,你可以将键和值存放在内部节点和叶子节点;但在B+树中,内部节点都是键,没有值,叶子节点同时存放键和值.
  • B+树的叶子节点有一条链相连,而B树的叶子节点各自独立.

5.1.使用B树的好处

B树可以在内部节点同时存储键和值,因此,把频繁访问的数据放在靠近根节点的地方将会大大提高热点数据的查询效率.这种特性使得B树在特定数据重复多次查询的场景中更加高效.

5.2.使用B+树的好处

由于B+树内部节点只存放键,不存放值,因此,一次读取,可以在内存页中获取更多的键,有利于更快的缩小查找范围.
B+树的叶节点由一条链相连,因此,当需要进行一次全数据遍历的时候,B+树只需要找到最小的节点,然后进行顺序遍历.而B树需要每一层进行遍历,花费更多时间.

6.Hash索引和B+树索引有什么区别或者说优劣

  • hash索引进行等值查询更快(一般情况下),但是无法进行范围查询.
  • hash索引不支持使用索引进行排序
  • hash索引不支持模糊查询以及多列索引的最左前缀匹配.
  • hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件(聚族索引,覆盖索引等)的时候可以只通过索引完成查询
  • hash索引虽然在等值查询上较快,但是不稳定.

因此,在大多数情况下,直接选择B+树索引可以获得稳定且较好的查询速度.

7.数据库为什么使用B+树而不是B树

  • B树只适合随机检索,而B+树同时支持随机检索和顺序检索
  • B+树空间利用率更高,可减少I/O次数,磁盘读写代价更低.
  • B+树的查询效率更加稳定.
  • B树在提高了磁盘IO性能的同时并没有解决元素遍历的效率低下的问题.
  • 增删文件(节点)时,效率更高.因为B+树的叶子节点包含所有的关键字,并以有序的两边结构存储,这样可很好提高增删效率.

8.什么是聚簇索引?

  • 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据
  • 非聚簇索引:将数据存储与索引分开结构,索引结构的叶子节点指向了数据的对应行.

9.非聚簇索引一定会回表查询吗

不一定, 如果要求的字段命中了索引,就不必回表查询.

10.联合索引是什么?为什么需要注意联合索引中的顺序?

MySQL可以多个字段同时建立一个索引,叫做联合索引.在联合索引中,如果想要命中索引,需要按照建立索引时的字段顺序挨个使用,否则无法命中索引.

以上是关于[3]Java开发实习面试打卡的主要内容,如果未能解决你的问题,请参考以下文章

[3]Java开发实习面试打卡

[4]Java开发实习面试打卡

[4]Java开发实习面试打卡

[4]Java开发实习面试打卡

[1]Java开发实习面试打卡

[1]Java开发实习面试打卡