【概述】

分块索引既适用于静态索引,又适用于动态索引。

在稠密索引中,索引项的个数与文件记录个数相同,空间代价很大,为减少索引项的个数,可以对文件分块,使分块有序。

分块有序,是指数据集的记录分为若干块,并且这些块满足两个条件:

  • 块间有序:后一块的所有记录的关键字要大于前一块的所有记录的关键字
  • 块内无序:每一块的记录不要求有序

在分块索引表中进行的查找称为分块查找,其分两步进行:

  1. 在索引表中确定待查关键码所在的块:块间是有序的,可使用二分查找、插值查找等提高效率
  2. 在相应块中查找待查关键码:块内是无序的,只能使用顺序查找

【方法】

对于分块有序的数据集,将每块对应一个索引项,其结构分为三个部分:

  • 最大关键码:存储每一块的最大关键字,以便在下一块中的最小关键字也能比这一块的最大关键字大
  • 块长:存储块中记录个数
  • 块首地址:指向块首数据元素的指针

【时间复杂度分析】

设 n 个记录的文件分成 m 个块,每个块内均有 t 条记录,则:n=m*t

设 Lb 为查找索引表确定关键码所在块的平均查找长度,Lw 为在块内查找关键码的平均查找长度,则分块查找的平均查找长度为:ASL=Lb+Lw

若采用顺序查找对索引表进行查找,则分块查找的平均查找长度为:

根据上面的式子可以发现,平均查找长度不仅取决于数据集的总记录数 n,还和每一个块的记录个数 t 有关,最佳的情况就是分的块数 m 与块中的记录数 t 相同,此时有:n=m*t=t*t

那么有:

可见,分块查找的时间复杂度 O(√n) 比顺序查找的 O(n) 提高不少,但与二分查找的 O(logn) 相比还是有不小的差距,因此在确定块的过程中,由于块间有序,所以可以采用二分、插值等方法来提高效率。

理论基础 —— 索引 —— 分块索引相关推荐

  1. mysql高效索引覆盖索引_MySQL高效索引:覆盖索引

    原标题:MySQL高效索引:覆盖索引 作者:踏雪无痕 cnblogs.com/chenpingzhao/p/4776981.html 概念 如果索引包含所有满足查询需要的数据,则该索引称为覆盖索引(C ...

  2. mysql建索引java_MySQL 索引

    MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...

  3. mysql单列索引和多列索引_mysql索引类型 normal, unique, full text

    问题1:mysql索引类型normal,unique,full text的区别是什么? normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用 ...

  4. mysql 建复合索引_关于mysql建立索引 复合索引 索引类型

    这两天有个非常强烈的感觉就是自己在一些特别的情况下还是hold不住,脑子easy放空或者说一下子不知道怎么去分析问题了,比方,问"hash和btree索引的差别",这非常难吗.仅仅 ...

  5. mongo 创建索引_索引系列:2dsphere索引

    MongoDB Manual (Version 4.2)> Indexes > 2dsphere Indexes No 1 概述 2dsphere索引支持计算类似地球的球体上的几何形状的查 ...

  6. 索引 mysql_MySQL 索引

    把自己学习索引的资料分享出来:首先推荐两个网页,用于理解mysql如何处理数据和平常联系基本sql 语句: http://mikehillyer.com/articles/managing-hiera ...

  7. pandas索引复合索引dataframe数据、索引其中一个水平(level)的所有数据行(index all rows in a level)

    pandas索引复合索引dataframe数据.索引其中一个水平(level)的所有数据行(index all rows in a level) 目录

  8. pandas索引复合索引dataframe数据、索引dataframe中指定行和指定列交叉格子的数据内容(getting a specific value)、使用元组tuple表达复合索引的指定行

    pandas索引复合索引dataframe数据.索引dataframe中指定行和指定列交叉格子的数据内容(getting a specific value).使用元组tuple表达复合索引的指定行 目 ...

  9. pandas索引复合索引dataframe数据、索引其中一个水平(level)的所特定数据行、指定数据行(index a row of a level)、使用元组tuple表达复合索引的指定行

    pandas索引复合索引dataframe数据.索引其中一个水平(level)的所特定数据行.指定数据行(index a row of a level).使用元组tuple表达复合索引的指定行 目录

最新文章

  1. java边遍历边删除的问题
  2. html5手机页面的那些meta
  3. System Center 2012 R2 CM系列之安装Configuration Manager
  4. CSS之关系选择器、属性选择器、伪类选择器
  5. 【转】自旋锁及其衍生锁
  6. java更改背景_java – 使用jquery更改menue的背景颜色
  7. 精通 TensorFlow 1.x 中文版(初稿)
  8. 异步类随机多址接入分析
  9. 一文搞懂什么是免疫算法Immune Algorithm【详细介绍】
  10. elasticsearch 分组求和
  11. fw325r没有虚拟服务器,FAST FW325R的配置方法教程
  12. 给element添加自定义图标
  13. wps页眉怎么设置不同页码_wps版word怎么从第二页设置页眉页脚
  14. itest手机考试有监控吗_itest考试有声音监控吗?
  15. mac插网线不能上网_苹果笔记本连接网线不能上网怎么回事
  16. 人机交互技术的发展趋势是怎样的?
  17. 综合布线施工工艺--
  18. css好看的html径向渐变,CSS3径向渐变
  19. Apache Sling App CMS <1.1.4 存在反射型XSS漏洞(CVE-2022-46769)
  20. 三菱编程软件GX Works2复制粘贴错位

热门文章

  1. 养成一个习惯有多难?不如先从一个小目标开始
  2. 用Python玩转统计数据:取样、计算相关性、拆分训练模型和测试
  3. 北京焦灼?上海颓废?看大数据如何解读城市性格
  4. mysql 储存引擎_详解mysql存储引擎的标准
  5. 乖乖,腾讯天美研发20万月薪刷爆朋友圈,网友:小丑竟是我自己
  6. 推荐 33 个 IDEA 最牛配置,好用到飞起来!
  7. 漫话:如何给女朋友解释为什么一到年底,部分网站就会出现日期混乱的现象?...
  8. 2019届互联网校招本科薪酬清单
  9. 【开源社区】如何参与JEECG开源团队?
  10. 【官方搭建入门】JEECG 平台开发环境搭建必读