摘要: 聚集索引(聚簇索引)(Clustered Index) 将数据存储与索引放在一起,索引结构的叶子节点保存了行数据,必须有,而且只能有一个 二级索引(非聚餐索引)(Secondary Index)将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键,可以存着多个。 聚集索引选取规则: 如果存着主 阅读全文
posted @ 2023-03-02 21:48 xycccode 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 首先,相对于二叉树存储同样的数据层级更少,搜索效率更高,假设恰好存储的是一组单向顺序插入的链表数据时,其层级是逐级递增的,很明显插入和查询性能都降低; 其次,B树虽然利用了向上分裂的数据结构算法规则,在一定程度上优化了存储性能,但其每个节点除了存放键值和地址外,还会存放当前节点的数据,这样相当于页上 阅读全文
posted @ 2023-03-02 21:31 xycccode 阅读(28) 评论(0) 推荐(0) 编辑
摘要: Hash索引实际上是采用Hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。 如果两个或多个键值,映射到相同的槽位上,它们就会产生冲突,也称hash碰撞,可以通过链表来解决hash冲突,相同的键值对象将会按照链表链接在当前槽位的后续节点中。 比如: hash索引的特 阅读全文
posted @ 2023-03-02 21:00 xycccode 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 实际上它就是B树的变种,以一颗最大度数(max-degree)为4(4阶)的b+tree为例: 所有的元素都会出现在叶子节点, 叶子节点形成一个单向链表,每一个节点都会通过一个指针指向下一个元素。 Mysql索引数据结构对经典的B+Tree树结构进行了优化。在原B+Tree树的基础上,增加了一个指向 阅读全文
posted @ 2023-03-02 20:48 xycccode 阅读(113) 评论(0) 推荐(0) 编辑
摘要: B-Tree树是一种多路平衡查找树,以一颗最大度数(max-degree)为5(5阶)的b-tree为例,每个节点最多存储4个key,5个指针。 树的度数指的是一个节点的子节点个数。 可以通过一个数据结构可视化的网站来简单演示一下。https://www.cs.usfca.edu/~galles/v 阅读全文
posted @ 2023-03-02 20:23 xycccode 阅读(70) 评论(0) 推荐(1) 编辑
摘要: 假如Mysql的索引结构是二叉树的数据结构,比较理想的结构如下: 如果主键是顺序插入的,则会形成一个单向链表,结构如下: 所以,如果选择二叉树作为索引结构,会存在以下缺点: 顺序插入时会形成一个链表,查询性能大大降低。 大数据情况下,层级较深,检索速度慢(二叉树由于一个节点下最多只能包含两个子节点) 阅读全文
posted @ 2023-03-02 19:54 xycccode 阅读(105) 评论(0) 推荐(0) 编辑
摘要: Mysql索引是在存储引擎层实现的,不同的存储引擎有不同的结构,主要包括以下几种: B+Tree索引:最常见的索引结构,大部分存储引擎都支持B+Tree索引。 Hash索引:底层数据结构是用Hash表也就是哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询。 R-Tree索引:也称空间索引 阅读全文
posted @ 2023-03-02 19:41 xycccode 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 索引是帮助mysql高效获取数据的数据结构(有序)。在数据之外,数据库还维护着满足特点查找算法的数据结构,这些数据结构以某种方式引用数据或者说指向数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。 索引有:二叉树、红黑树、B+Tree树、B-Tree树 优点:提高数据解锁效率 阅读全文
posted @ 2023-03-02 19:07 xycccode 阅读(11) 评论(0) 推荐(0) 编辑
摘要: 在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。InnoDB: 是Mysql的默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删 阅读全文
posted @ 2023-03-02 17:42 xycccode 阅读(40) 评论(0) 推荐(0) 编辑
摘要: InnoDB引擎与MyISAM引擎的区别 ?①. InnoDB引擎, 支持事务, 而MyISAM不支持。②. InnoDB引擎, 支持行锁和表锁, 而MyISAM仅支持表锁, 不支持行锁。③. InnoDB引擎, 支持外键, 而MyISAM是不支持的。主要是上述三点区别,当然也可以从索引结构、存储限 阅读全文
posted @ 2023-03-02 17:35 xycccode 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 介绍:Memory存储引擎的表数据存储在内存中,由于受到硬件的问题、或断电问题的影响,只能将这些表作为临时的表或缓存使用。 特点:内存存放、hash索引(默认) 文件:xxx.sdi(存表结构信息)、没有存表数据文件和表索引文件。 阅读全文
posted @ 2023-03-02 17:31 xycccode 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 介绍:MyISAM存储引擎是mysql早期的默认存储引擎 特点:不支持事务、不支持外键、不支持行锁,支持表锁,访问速度比较快。 文件:.MYD(存放表的数据)、.MYI(存放表的索引)、.sdi(文本格式的json文件,存储表结构信息)。 阅读全文
posted @ 2023-03-02 17:27 xycccode 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 介绍:InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB是默认的MySQL 存储引擎。 特点:支持事务、行级锁、外键 文件:xxx.ibd是表空间文件,其中的xxx代表表名,innoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm-早 阅读全文
posted @ 2023-03-02 17:21 xycccode 阅读(20) 评论(0) 推荐(0) 编辑