mysql聚合索引和主键索引的区别是
@1. 按照功能划分2. 按照物理实现划分2.1 聚集索引2.2 非聚集索引3. 小结 之前松哥在前面的文章中介绍 MySQL 的索引时,有小伙伴表示被概念搞晕了,主键索引、非主键索引、聚簇索引、非聚...
2024.11.22整理了一下mysql的面试,问得最多的有3个:
mysql引擎:innodb和isam的区别mysql索引:索引下推、索引覆盖、回表概念、like索引失效mysql锁和事务我们先总结下mysql引擎相关问题,可以点赞收藏慢慢看。
灵魂3问:你知道哪些mysql存储引擎?有什么区别?适用于什么场景?1、存储引擎
MyISAM和InnoDB
2、区别
(1)InnoDB支持事务,MyISAM不支持
(2)InnoDB支持外键,MyISAM不支持
(3)InnoDB是聚集索引,B+树作为索引索引结构,数据文件和主键索引是绑在一起的,辅助索引需要先查询到主键,再通过主键查询到数据;MyISAM是非聚集索引,也是B+树,但索引和数据文件是分离的,索引保存了数据文件指针,主键索引和辅助索引是独立的
(4)InnoDB不保存表的行数,没有where限定语句的count(*)需要全表扫描,因为InnoDB有事务,同一时刻表的行数对不同事务是不一样的;MyISAM用变量保存了表的行数。
(5)5.7以前的InnoDB不支持全文索引,MyISAM支持全文索引。
(6)MyISAM表可以被压缩后进行查询操作
(7)InnoDB支持表、行级锁,MyISAM只支持表级锁
(8)InnoDB表必须有唯一索引(比如主键索引),MyISAM可以没有
(9)InnoDB保存表定义文件、数据文件;MyISAM保存表定义文件,数据文件,索引文件。
3、使用场景
执行大量查询、没有并发问题,使用MyISAM;想利用事务特性,想要更小粒度的行锁减少并发消耗,使用InnoDBInnoDB为什么推荐使用自增ID作为主键?自增ID可以保证每次插入时B+索引是从右边扩展的,可以避免B+树和频繁合并和分裂(对比使用UUID)。如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。
为什么InnoDB要用B+树,不用Hash,二叉树,AVL,红黑树、B树?1、为什么不用Hash?
InnoDB有自适应哈希,单条数据查询的确哈希更快,但哈希不适合范围查找;
2、为什么不用二叉排序树?
容易退化为O(N)
3、为什么不用平衡平衡二叉树AVL、红黑树?
这些主要都是用于内存数据结构,比如Java的HashMap,Mysql这种磁盘数据结构,数据量大的时候,树的高度会很高,导致磁盘I/O次数变多,性能降低。
4、为什么不用B树?
B树和B+树的主要区别在于,B树的分支节点上存储着数据,B+树只在叶子节点存储数据。
(1)磁盘I/O的写次数比B树更低
B+树内部节点比B树更小,存的是索引,因此将key读入内存的值越多,查找磁盘的次数就越少。
(2)每次查询时间复杂度固定
B+树任意关键字的查找都必须从根节点走到叶子节点;而B树分支节点也有数据,数据的查询效率不同。
(3)遍历效率更高
对于范围查询,B+树有叶子节点的指针,因此只需要遍历叶子节点即可,但B树需要进行中序遍历来查找
(4)B树的高度更高,查询效率更低
B树由于分支节点会保存数据,这回导致分支节点能保存的指针数量变少,那么只能通过增加高度,高度增加会导致I/O操作变多,查询性能变低。
5、【深入】既然增加树的度可以降低树的高度,那么无限增加树的度是不是就有最优的查询效率?
并不会。因为这样会退化为一个有序数组,需要全部加载进内存,而B+树可以按节点根据查询进度分批加载。
6、B+树的查询复杂度是?
Olog(N)
总结语如果你觉得有收获,可以点赞收藏转发一下,以后面试遇到这类问题也不怕啦。
@1. 按照功能划分2. 按照物理实现划分2.1 聚集索引2.2 非聚集索引3. 小结 之前松哥在前面的文章中介绍 MySQL 的索引时,有小伙伴表示被概念搞晕了,主键索引、非主键索引、聚簇索引、非聚...
2024.11.22概述一直以来,觉得MySQL中使用\G参数改变输出结果集的显示方式非常好用,尤其是在命令行界面。但是ORACLE数据库没有这个功能,今天在搜索到Tom大师的一篇博文时,发现大师用一个存储过程print...
2024.11.20MySQL索引有哪些类型MySQL目前主要有以下几种索引类型:普通索引:最基本的索引,没有任何限制条件。唯一索引:与普通索引类似,但要求索引列的值唯一,不允许重复。主键索引:是一种特殊的唯一索引,不允...
2024.11.20从字面可以这么理解什么是游标,游标就像是水面上漂浮的一个标记,这个标记可以来回游动,一会游到这里一会游到那里,这里的河水可以理解为是数据的集合,这个标记就是在这些数据间来回游动。为什么 MySQL 会...
2024.11.20information_schema.tablesinformation_schema.tables 元数据? ----> “基表”(无法直接查询和修改的)----> DDL 进行元数据修改---->...
2024.11.21