Java八股文总结(续)
接上篇笔记:Jhttps://blog.csdn.net/weixin_44780078/article/details/130192373
文章目录
- Java八股文总结(续)
- 六、MySql 相关
- 1. InnoDB 与 MyISAM 的区别?
- 2. 为什么 InnoDB 存储引擎表必须有主键,并且推荐使用整型的自增方式?
- 3. explain 查看 sql 执行计划
六、MySql 相关
1. InnoDB 与 MyISAM 的区别?
InnoDB 和 MyISAM 都是 MySql 的存储引擎。
InnoDB | MyISAM | |
---|---|---|
事务 | 支持 | 不支持 |
主键 | 一定要有 | 不一定要有 |
外键 | 支持 | 不支持 |
聚簇索引 | 是(数据文件和索引文件是绑定在一起的) | 不是(相反数据文件和索引文件是分开的) |
全文索引 | 不支持(v5.7之后也支持) | 支持 |
行数 | 不存储 | 存储 |
行锁 | 支持 | 不支持 |
2. 为什么 InnoDB 存储引擎表必须有主键,并且推荐使用整型的自增方式?
对于主键:
- 主键可以确保表中的每一行数据都具有唯一标识,确保数据完整性。没有主键的表可能会出现重复数据或数据无法明确定位的情况。
- InnoDB 存储引擎采用 B+ 树作为索引结构,在数据访问和查询过程中,可以通过主键高效的定位数据。如果没有主键,InnoDB 会选择一个唯一非空索引作为隐藏主键,但这样可能导致索引性能下降。
- 方便与其他表进行外键关联。
对于整型的自增方式:
- 整型数据类型在存储和比较上相对于其他数据类型占用空间小,更加高效,索引速度快。自增方式可以保证每次插入新记录时,主键值都是递增的,这样可以减少索引维护的开销。
- 自增的主键具有连续性和可读性,方便人们查看和理解;
3. explain 查看 sql 执行计划
explain 中 type:all 表示全表通查。
explain select * from fangyi_user.user
explain 中 type:index 表示全表扫描索引文件(但是只遍历索引树)。
explain select user_id from fangyi_user.user // user_id是主键
explain 中 type:range 表示检索给定范围的行,使用一个索引来选择行。(不需要优化了)
explain select * from fangyi_user.user WHERE user_id > 1
explain 中 type:const 表示最多有一个匹配行,读取1次,速度非常快。(不需要优化了)
explain select * from fangyi_user.user WHERE user_id = 5661
explain type 级别:system > const > eq_ref > ref > range > index > all.
SQL 优化目标:至少要达到 range 级别,要求是 ref 级别,如果是 const 最好。
每天都在更新中。。。