• Monday
    2019-08-12
    Mysql如text、MediumText等类型最大存储长度为64k、16M,已经超过了一个页16k,请问包含这几种类型的记录都怎么存储的?
     1
     10
  • 我行我素
    2019-08-12
    1.逻辑上连续的,在文中有说采用链表的结构让数据页之间不需要是物理上的连续,而是逻辑上的连续;
    2.二分查找发,在总结图中有详细的说明,首先是从B+树的根开始,逐层检索直到叶子节点,找到叶子节点对应的数据页,将数据页加载到内存中,通过页目录中的槽采用二分查找的方式先找到一个粗略的记录分组,在分组中通过链表遍历的方式进行记录的查找

    作者回复: 总结的不错

     2
     10
  • Monday
    2019-08-12
    关于数据页有几个疑问:
    1、分组1为什么只有一条记录?
    2、分组之间采用的是二分查找,表示分组1,分组2,...,分组n之间是通过某种顺序进行排列的。假设除了最后一个分组n外,所有的分组都存储满了8条记录,这时新增一条记录x按有序性应该放置在分组2中,是不是分组2,3,分组n-1都需要进行记录的改动?
    3、最大最小记录是专门给数据页内二分查找赋值low与high设计的?
    
     8
  • wusiration
    2019-08-12
    问题1:聚集索引是在物理上连续,因为聚集索引是指表中数据行按索引的排序方式进行存储,表设置了聚集索引,数据行会按照索引列的值在磁盘上物理存储和排序;(摘抄自23索引的概览)
    问题2:先是从B+树的根开始,逐层检索找到相应叶子节点对应的数据页,将数据页加载到内存中,通过页目录中的槽采用二分查找的方式先找到一个粗略的记录分组,在分组中通过链表遍历的方式进行记录的查找
     2
     6
  • 老毕
    2019-08-13
    逻辑上连续,物理上未必连续。数据库的最小分配单位是页,连续分配一定数量的物理页构成段。每页存储只够存储有限的记录,记录不断增加,一定会超出页,继而超出段,无法保证物理连续。进一步说,数据库的磁盘分配操作基于操作系统,单个“页”是否一定在物理介质上连续,也不一定。

    B+树只有叶节点含有数据指针,总是从根节点开始检索,直到叶节点。如果是范围检索,只需要一次根到叶的检索,然后就能借助叶节点的双向链表结构特性,顺序移动直到找出所有满足范围的数据。
    
     3
  • Leon📷
    2019-09-12
    A clustered index, on the other hand, is actually the table. It is an index that enforces the ordering on the rows of the table physically.物理上连续的

    作者回复: 对的

     1
     1
  • 唔多志
    2019-08-23
    请问一下老师,这些内容的源头是在哪里呢?想去源头看看

    作者回复: 感谢兴趣,最直接的来源就是官方的Document,比如 https://dev.mysql.com/doc/internals/en/innodb-fil-header.html 而且检索起来也很方便,比如你想要查询优化器的cost model是如何设计的,就可以找到 https://dev.mysql.com/doc/refman/8.0/en/cost-model.html

    
     1
  • 阿恺
    2019-08-13
    关于普通索引和唯一索引的效率问题还想请教一下:普通索引不是主键,不是物理索引,叶子节点记录的是行的位置,实际可能分散在多个页中,那就存在多次IO读取,效率会降低,为什么说差不多?
    
     1
  • 往事随风,顺其自然
    2019-08-12
    逻辑上连续的,记录之间采用单链表方式实现

    作者回复: 对的

    
     1
  • Hash
    2019-12-23
    第一个问题
    我认为物理上是连续的(具体原因我现在还说不出来,因为这个问题感觉逻辑连续和物理连续都没有绝对的说法,后面补上)

    第二个问题
    B+树的检索流程是一个自顶向下,逐层检索的过程!具体的过程老师在24讲以及这一讲中已经说的很明白了!

    我得认真思考!老师的问题总是很耐人寻味!
    题外话:希望大家都继续坚持学习,学习是一辈子的事,不要渴望一遍两遍就掌握某个东西!很多东西都是在反反复复的学习之中的某个时刻突然领悟的!加油!
    展开

    作者回复: 学习是一辈子的事,感谢加武同学的分享

    
    
  • 爬行的蜗牛
    2019-12-18
    1. 聚集索引存储的行记录是在物理上是连续的; 2. B+ 树进行记录的检索流程: 从根节点出发 , 至上而下检索, 到叶子节点后,加载到内存中, 通过二分查找发找到大概的位置, 然后遍历链表的方法, 查找到对应的数据行。
    
    
  • ballgod
    2019-12-11
    建议最后给出的问题,老师在回复里给一下答案,谢谢
    
    
  • 梁
    2019-11-22
    聚集索引是在物理上的顺序和逻辑上的顺序相同

    作者回复: 对的

    
    
  • 书痕
    2019-11-01
    关于问题1,应该只是通过双向链表保证数据在逻辑上与聚集索引顺序一致,物理介质上不一定连续
    
    
  • 小王子与偷影子的人
    2019-10-18
    思考题1

    摘自23讲:
    聚集索引指表中数据行按索引的排序方式进行存储,对查找行很有效。只有当表包含聚集索引时,表内的数据行才会按找索引列的值在磁盘上进行物理排序和存储。每一个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。
    
    
  • Yuhui
    2019-09-19
    请教一下老师,”通过文件尾的校验和(checksum 值)与文件头的校验和做比较“来判断页数据传输是否完整这个是怎么回事?谢谢!

    作者回复: 校验和checksum经常用于数据传输过程中的数据完整性/准确性校验。checksum算法有很多,举个例子比如MD5算法,在文件头的时候给出完整的文件应该得到的MD5数值为多少,等到文件尾的时候,再使用MD5对整体进行运算,看下和文件头给出的是否一致。如果一致,则说明传输过程是完整正确的,如果不一致则存在错误,需要重新传输。

    
    
  • wonderq_gk
    2019-08-27
    "非叶子节点,包括了多个索引行,每个索引行里存储索引键和指向下一层页面的页面指针"
    感觉是不是说错了,指向下一层页面的页面指针不是在文件头里面吗?
    
    
  • 习惯沉淀
    2019-08-20
    老师,“在B+树中,每一个节点都是一个页”这句,有点不太理解,非叶子节点不是不存放行记录吗,非叶子节点就是页,只不过页里面不存放数据是这意思吗?

    作者回复: 对 B+树的非叶子节点不存放具体的行记录数据。

    
    
  • asdf100
    2019-08-13
    对页里查找记录时,可先根据二分查找法,先找到记录所有在槽,时间复杂度为O(log2n)。槽内有多条记录,再遍历所有记录,直到找到指定记录为止,时间复杂度为O(n)。

    作者回复: 正确

    
    
  • asdf100
    2019-08-13
    遍历槽 3 中的所有记录,找到关键字为 9 的记录,取出该条记录的信息即为我们想要查找的内容。由于单链表,所以查询复杂度为O(n)

    作者回复: 对的

    
    
我们在线,来聊聊吧