ms-34-mysql有哪些索引??
主键索引
唯一索引
普通索引
前缀索引
联合索引
Innodb引擎要求每一张表必须有一个主键索引,表的ID字段就是主键索引
查询比较频繁的字段设立普通索引,多个字段查询的话可以设置联合索引
对于长文本可以只对字段的前缀部分设立索引,即前缀索引,减少索引存储空间
ms-35-MySQL主键是聚簇索引吗??
是的,主键就是聚簇索引,通常会对ID字段设置主键索引,Innodb默认把主键索引作为聚簇索引的索引键
ms-36-主键为什么不推荐有业务含义??
1. 业务会有变动的可能性,一些业务字段会因为项目的需求而变更,如果业务含义作为主键,变更索引成本太高,所以在设计初期就规避这种含有业务含义的主键设计
2. 业务含义的主键不是顺序自增,可能会发生页分裂,影响性能
ms-37-主键是用自增还是UUID??
用自增ID比较好,因为UUID是随机值
在插入过程中,随机值可能会产生页分裂,导致内存碎片,影响性能
UUID是字符串类型,36个字符组成,占用内存大,而页的大小是固定的,UUID可能会出现在不同的页中,查询过程中IO次数也会变多,影响性能
自增ID也有缺点,在分库分表情况不适用,没有办法保证全局唯一,需要考虑雪花算法作为主键
ms-38-普通索引和唯一索引有什么区别?哪个更新性能更好??
普通索引可以存放重复值,唯一索引的值必须是唯一的
普通索引的性能会更好,普通索引在更新的过程中,可以把新操作缓存到change buffer中,等空闲时间再进行操作,而唯一索引有唯一约束,需要判断更新的值是否已经在磁盘,这里会涉及到磁盘的IO访问
相比于普通索引,减少了随机IO,性能更好