当前位置: 首页 > news >正文

索引

一、什么是索引
       索引可以理解为我们小时候使用的汉语字典的索引,如果想在字典中查找一个字,一页一页地翻字典查找是非常慢的,但如果使用字典的索引进行查询,很快就可以查到了。数据库的索引也是类似的。
    数据库中的索引一般是按照B树来组织的,叶结点指向真正的数据,B树的定义我这里就不介绍了,有兴趣的话可以去翻翻数据结构的书。

   二、聚族索引
   在这里还是用字典来进行类比,一般来说汉语字典中有几种索引,如拼音、偏旁、笔画等。字典本身的组织也是排序的,我记得一般是按照拼音排序的。这里的拼音就是聚族索引。也就是说 聚族索引的组织顺序和数据本身的组织顺序是一致的,这也解释了数据库中只能定义一个聚族索引的原因,因为数据本身只能按一种方式进行排序。
   那聚族索引有什么特别的好处呢,这个好处就是在数据库中执行查找一批数据的语句会比较快,因为数据已经按照聚族索引排好序了,很少的io操作就可以将数据从库中取出。好比你在字典中查找发音从从a到c的汉字,只需要查到a的开始页和c的结束页,中间的所有页都符合查询要求,不用再一页一页地查找。
    


图1 聚族索引

   三、非聚族索引
   非聚族索引就好比字典里的偏旁、笔画索引,索引组织顺序和数据组织顺序不一致,因此非聚族索引可以创建多个。当查找一条数据时,非聚族索引和聚族索引的效率相差不大,但查找一批数据(n)时,非聚族索引需要的io可能是聚族索引的n倍,因为非聚族索引需要一条一条地进行查找。


图2 非聚族索引

   四、组合索引
   组合索引在索引的key中保存了所有组成该组合索引的字段,但只按第一个字段进行排序。因为索引key中保存的内容增多,因此组合索引需要的空间一般来说比单字段索引大。组合索引的好处是假如你的查询需要返回的数据字段都在组合索引的索引字段中,数据库将不会访问数据页,而直接返回索引中的字段值,可以加快查询速度。假如你的查询不满足这个条件,组合索引就是没有意义的,反而浪费了存储空间。

图3 组合索引

 最后出一道小题目,考考大家看懂没有:
假设表中一共有100条数据,索引的B树为三层,查询结果返回50条按照聚族索引排序的数据,不建索引查询、按照聚族索引查询、按照非聚族索引查询所需的io次数各是多少

转载于:https://www.cnblogs.com/BlogNetSpace/archive/2008/07/24/1250931.html

相关文章:

  • 黄东旭:When TiDB Meets Kubernetes
  • c# FileSystemWatcher控件的使用方法
  • Android 自己定义View学习(2)
  • redis订阅/发布 分享
  • 红与黑
  • 读取Web.Config中的设置参数之二
  • 自学有感7
  • Http之Get/Post请求区别
  • 清河好程序猿训练营是什么?
  • 分享:Ajax工具文件
  • 洛谷P1287 盒子与球 数学
  • 识别地图上的地名-- 笔记一
  • 如何破解来自私有云的安全挑战
  • SQL优化34条[转载]
  • 你的每行代码值多少钱?
  • JavaScript服务器推送技术之 WebSocket
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • windows下mongoDB的环境配置
  • 分享一份非常强势的Android面试题
  • 开源SQL-on-Hadoop系统一览
  • 实现菜单下拉伸展折叠效果demo
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 如何用纯 CSS 创作一个货车 loader
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #pragma data_seg 共享数据区(转)
  • $.ajax()参数及用法
  • (31)对象的克隆
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (全注解开发)学习Spring-MVC的第三天
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .apk文件,IIS不支持下载解决
  • .gitignore文件设置了忽略但不生效
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .net Signalr 使用笔记
  • .net2005怎么读string形的xml,不是xml文件。
  • .Net的DataSet直接与SQL2005交互
  • .net开发时的诡异问题,button的onclick事件无效
  • @ConfigurationProperties注解对数据的自动封装
  • @RequestBody与@ResponseBody的使用
  • @RequestParam详解
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ 数据结构 - C++]红黑树RBTree