摘要:
一、根页面万年不动 在之前的文章里,为了方便理解,都是先画存储用户记录的叶子节点,然后再画出存储目录项记录的内节点。 但实际上 B+ 树的行成过程是这样的: 每当为某个表创建一个 B+ 树索引,都会为这个索引创建一个根节点页面。最开始表里没数据,所以根节点中既没有用户记录,也没有目录项记录。 当往表 阅读全文
摘要:
pickle 模块可以对一个 Python 对象的二进制进行序列化和反序列化。说白了,就是它能够实现任意对象与二进制直接的相互转化,也可以实现对象与文本之间的相互转化。 比如,我程序里有一个 python 对象,我想把它存到磁盘里,于是我用 pickle 把他转到一个文本里。当后面我想使用的时候,读 阅读全文
摘要:
接上一篇内容。 一、聚簇索引 其实之前内容中介绍的 B+ 树就是聚簇索引。 这种索引不需要我们显示地使用 INDEX 语句去创建,InnoDB 引擎会自动创建。另外,在 InnoDB 引擎中,聚簇索引就是数据的存储方式。 它有 2 个特点: 特点 1 使用记录主键值的大小进行记录和页的排序。 其中又 阅读全文
摘要:
接上一篇内容,InnoDB 的作者想到一种更灵活的方式来管理所有目录项,是什么? 一、目录项记录页 其实这些用户目录项与用户记录很像,只是目录项中的两个列记录的是主键和页号而已,那么就可以复用之前存储用户记录的数据页来存储目录项。 为了区分用户记录和目录项,仍然使用 record_type 这个属性 阅读全文
摘要:
一、没有索引的时候如何查找 先忽略掉索引这个概念,如果现在直接要查某条记录,要如何查找呢? 在一个页中查找 如果表中的记录很少,一个页就够放,那么这时候有 2 种情况: 用主键为搜索条件:这时就是之前文章提过的方式,页面目录中用二分法快速定位到槽,然后遍历该槽对应分组的记录,最终找到指定记录。 用其 阅读全文
摘要:
一、页目录和槽 接上一篇,现在知道记录在页中按照主键大小顺序串成了单链表。 那么我使用主键查询的时候,最顺其自然的办法肯定是从第一条记录,也就是 Infrimum 记录开始,一直向后找,只要存在总会找到。这种在数据量少的时候还好说,一旦数据多了,遍历耗时一定非常长。 于是,作者又想到了一个好办法,灵 阅读全文
摘要:
InnoDB 是 mysql 的默认引擎,也是我们最常用的,所以基于 InnoDB,学习页结构。而学习页结构,是为了更好的学习索引。 一、页的简介 页是 InnoDB 管理存储空间的基本单位,一个页的大小一般是 16kb。 为了达成不同的目的,作者设计了多种类型的页,比如: 存放表空间头部信息的页 阅读全文
摘要:
查数据大家都经常干,但是你知道从执行sql到看到结果,mysql背后都做了什么事情吗? 一、mysql的架构 client/server 这种客户端到服务端的架构,大家一定都很熟悉,其实 mysql 也与之类似。 可以有多个客户端与服务端连接。 客户端可以向服务端发送增删查改的请求。 服务端根据请求 阅读全文
摘要:
我们知道,性能测试的目的是分析判断性能瓶颈并调优,最终得出性能结果来评估系统的性能指标是否满足既定值。 那么,如何能做好分析,显然是非常重要的。 通常来说,对于性能分析有这样一幅阶梯图: 工具操作:包括压力工具、监控工具、剖析工具、调试工具。 数值理解:包括上面工具中所有输出的数据。 趋势分析、相关 阅读全文
摘要:
一、什么是并发 或许你在网上会得到**"绝对并发"和"相对并发"**这两个概念。绝对并发指的是同一时刻的并发数;相对并发指的是一个时间段内发生的事情。 但实际上,我们讲并发的时候不需要去区分上面这2个概念。为什么? 想象中的并发 假设上图中的这些小人是严格按照这个逻辑到达系统的,那显然,系统的绝对并 阅读全文