• 千锤百炼领悟之极限
    2022-12-06 来自北京
    如果我们每行数据的索引是 1KB,那么除去 Page 页的一些固定结构占用外,一页只能放 16 条数据。 我们从这个 Page 就可以推导出:索引第一层放 16 条,树第二层大概能放 2 万条,树第三层大概能放 2400 万条。 请问老师,上面数的第二层能放2万条,第三层能放2400万条是如何计算出来的?

    作者回复: 你好,这个问题比较复杂,简单描述下,假设我们的b+tree是三层深度那么:第一层:(15k(page去掉头尾数据存储可用大小) / 12byte(bigint主键+页号FIL_PAGE_OFFSET)) = 1280 条数据 每个page,那么第二层: 1280条数据 * 15个页 = 19200 条数据,最后第三层: (1280条数据 ^ 2) * 15个页 = 24576000 条数据,大致是这样,只有末节点放置的是数据,前几个放置的都是主键以及page号

    共 4 条评论
    5
  • 雨落~紫竹
    2023-02-03 来自北京
    我们从这个 Page 就可以推导出:索引第一层放 16 条,树第二层大概能放 2 万条,树第三层大概能放 2400 万条。(这地方有很严重的歧义) 作者应该说的1K是索引叶子结点大小 而不是非叶子结点大小 所以 按照单页16k容量算 第一层 存放16 * 1024 / 14=1170 第二层 1170*16=18720 如果作者说 非叶子结点1k 那就是作者算错了

    作者回复: 确实

    共 3 条评论
    2
  • Mr.Tree
    2022-11-22 来自北京
    有点好奇,OLAP既然是列式存储,那么当查询返回是其中几列数据中少量满足条件的数据查询时,它是怎么快速将满足条件的那一行的数据一一对应起来的?

    作者回复: 你好,Mr.Tree,你问到了关键点,这个问题在后面的写多读少相关章节课程有详细介绍

    共 3 条评论
    