MySQL常见问题总结

MySQL常见问题总结(持续更新)

b树和b+树的区别?MySQL为什么是用b+树存储索引?

  • b+树非叶子节点只存储索引数据,不存储其他数据;真实数据全部存储在叶子节点
  • b+树叶子节点通过双向指针链接,方便范围查找
  • b+树非叶子节点可以存储更多的数据,相同层级可以存储更大量的数据

为什么推荐创建主键?主键为什么建议整形自增ID类型?

  • innodb存储引擎需要有一个主键索引,如果自己不创建主键的话,MySQL需要检测数据选择一个数据唯一的行作为主键,找不到的话会生成一个隐藏行作为主键用于构建聚簇索引,
    影响MySQL性能
  • 构建的b+树是从左到右依次递增的数据结构,如果主键不是自增之间,添加数据时可能涉及频繁的索引结构的平衡操作,影响插入的性能
  • 使用整形数据的原因是整形在进行大小比较的时候性能较高。

什么是聚簇索引和非聚簇索引?

  • 聚簇索引:叶子节点存储完整数据的索引就是聚簇索引;例如innodb的主键索引
  • 非聚簇索引:完整数据和索引分开存储的索引;例如myisam对应的索引以及innodb中的普通索引

什么是最左前缀?什么是聚合索引?为什么聚合索引使用必须符合最左前缀原则?

  • 聚合索引:多个字段共同组成的索引就是组合索引;防止使用过多的索引树,影响数据新增和修改的性能
  • 最左前缀原则:联合索引进行排序时,先使用最左面的字段进行排序,数据一致时再利用后面的字段进行排序
  • 联合索引为什么使用最左前缀: 如果不按照最左前缀进行查询,例如直接使用第二个字段进行查找,在b+树上面是无序的,索引失效需要全表扫描

什么是回表查询?

  • 回表查询就是想要查询的字段只在普通索引树上面不能全部获取,需要根据主键id去主键索引树上面进行查询,这个查询操作就是回标查询;有时为了提高查询的效率可以让查询
    的所有字段在普通索引数即可获取到,不用回表查询从而提高性能,不过需要按照实际情况进行分析决定。

你可能感兴趣的:(MySQL,mysql,java)