Administrator
发布于 2025-04-23 / 11 阅读
0
0

索引应用

  • 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,性能更好


评论