最后
光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性
Java面试宝典2021版
最常见Java面试题解析(2021最新版)
2021企业Java面试题精选
什么是前缀索引?
前缀索引说白了就是对文本的前几个字符(具体是几个字符在建立索引时指定)建立索引,这样建立起来的索引更小,所以查询更快。前缀索引能有效减小索引文件的大小,提高索引的速度。但是前缀索引也有它的坏处:MySQL 不能在 ORDER BY 或 GROUP BY 中使用前缀索引,也不能把它们用作覆盖索引(Covering Index)。
建立前缀索引的语法:ALTER TABLE table_name ADD KEY(column_name(prefix_length));
3、主键准则
-
表必须有主键
-
不使用更新频繁的列
-
尽量不选择字符串列
-
不使用UUID MD5 HASH
-
默认使用非空的唯一键
-
建议选择自增或发号器
4、 重要的SQL必须被索引,核心SQL优先考虑覆盖索索引
-
UPDATE、DELETE语句的WHERE条件列
-
ORDER BY、GROUP BY、DISTINCT的字段
-
多表JOIN的字段
5、区分度最大的字段放在前面
-
选择筛选性更优的字段放在最前面,比如单号、userid等,type,status等筛选性一般不建议放在最前面
-
索引根据左前缀原则,当建立一个联合索引(a,b,c),则查询条件里面只有包含(a)或(a,b)或(a,b,c)的时候才能走索引,(a,c)作为条件的时候只能使用到a列索引,所以这个时候要确定a的返回列一定不能太多,不然语句设计就不合理,(b,c)则不能走索引
-
合理创建联合索引(避免冗余),(a,b,c) 相当于 (a) 、(a,b) 、(a,b,c)
6、索引禁忌
-
不在低基数列上建立索引,例如“性别”
-
不在索引列进行数学运算和函数运算
-
不要索引常用的小型表
7、 尽量不使用外键
-
外键用来保护参照完整性,可在业务端实现
-
对父表和子表的操作会相互影响,降低可用性
-
INNODB本身对online DDL的限制
MYSQL 中索引的限制
-
MYISAM 存储引擎索引长度的总和不能超过 1000 字节
-
BLOB 和 TEXT 类型的列只能创建前缀索引
-
MYSQL 目前不支持函数索引
-
使用不等于 (!= 或者 <>) 的时候, MYSQL 无法使用索引。
-
过滤字段使用函数运算 (如 abs (column)) 后, MYSQL无法使用索引。
-
join语句中join条件字段类型不一致的时候MYSQL无法使用索引
-
使用 LIKE 操作的时候如果条件以通配符开始 (如 ‘%abc…’)时, MYSQL无法使用索引。
-
使用非等值查询的时候, MYSQL 无法使用 Hash 索引。
推荐
最后
针对以上面试题,小编已经把面试题+答案整理好了
面试专题
除了以上面试题+答案,小编同时还整理了微服务相关的实战文档也可以分享给大家学习