最后总结
搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析
最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化
```
MyISAM与InnoDB 的区别: link.
-
为什么要使用索引
数据库中数据存储在磁盘,磁盘的顺序查询速度是很慢的,所有的顺序查找指的是读取磁盘中的数据⼀ 条⼀条的进⾏查找。
索引就是为了避免顺序查询,提供查询速度的。
-
索引的优势
实际的一个功能性数据库中,它所存放的数据信息是十分的多的,数据量很大,会占用更多的存储空间,而一般来说这些数据是被存储在磁盘中的,而不会是存储在内存里。但是索引不一样,它所存储的只是每一个数据信息对应的存储空间的地址,如果我们使用索引存放了地址,查询时将索引加载到内存中,查询数据时就可以快速的从内存里去扫描索引,找到数据信息存放的内存地址,就可以精准快速的拿到想要的数据了。
-
索引 VS 书的目录
从宏观上来讲,我们可以认为索引就是书的目录。
但从微观上来讲,索引不等于书的目录。因为一本书的目录只有一个,而一张表可以有多个索引,而每个索引都相当于一个目录。
-
索引分类
索引的分类有以下⼏种:
主键索引(聚簇索引):⼀种特殊的唯⼀索引,不允许有空值,⼀般是在建表的时候同时创建主键 索引(通过 primary key)。
非主键索引(⼆级索引/非聚簇索引):除主键索引之外的其他索引。
唯⼀索引:不能重复的索引。 普通索引:可以重复也可以为 NULL 的索引。
联合索引:使⽤多个字段联合组成的索引。
注意:创建主键约束(PRIMARY KEY)、唯⼀约束(UNIQUE)、外键约束(FOREIGN KEY)时, 会⾃动创建对应列的索引。
- 查看索引
show index from 表名;
- .创建索引
假设,我们有⼀个主键列为 ID 的表,表中有字段 k,并且在 k 上有索引。这个表的建表语句是:
create table T(
id int primary key,
k int not null,
name varchar(16),
index (k) )
engine=InnoDB;
- 创建普通索引
create index 索引名 on 表名(字段名[,字段名2...]);
- 创建唯一索引
create unique index 索引名 on 表名(字段名); 1
- 添加主键索引
alter table table_name add primary key (column);
- 删除索引
drop index 索引名 on 表名;
-
索引 VS 约束
① 创建索引的时候会自动创建约束,并且在创建约束的时候也会自动创建索引
② 索引和约束的不同是业务定义,约束是用来规范数据的正确性,而索引是用来提升数据库的程序性能的
③ 大多数情况可以理解为:索引和约束是共生关系(反例:非空约束)
-
创建索引注意事项
① 在创建索引的时候会创建对应的约束,而删除索引的时候也会删除对应的约束
② 唯一索引在创建时,要确保原先的数据符合唯一约束,这样才能成功的创建唯一约束,否则会创建失败
- 注意事项
-
创建索引要考虑的因素
① 数据量是否足够大
② 创建索引的列是否经常使用到查询条件
原因:因为索引的产生是为了提高表的查询效率,索引的底层使用的是 B+ 树,在表的频繁添加和删除的时候,都是要对索引进行维护的,要重新整理树的结构。
Java核心架构进阶知识点
面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的
内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补
行脑补