一、什么是索引
索引可以理解为我们小时候使用
的汉语字典的索引,如果想在字典中查找一个字,一页一页地翻字典查找是非常慢的,但如果使用
字典的索引进行查询,很快就可以查到了。数据库的索引也是类似的。
数据库中的索引一般是按照B树来组织的,叶结点指向真正的数据,B树的定义我这里就不介绍了,有兴趣的话可以去翻翻数据结构的书。
二、聚族索引
在这里还是用
字典来进行类比,一般来说汉语字典中有几种索引,如拼音、偏旁、笔画等。字典本身的组织也是排序的,我记得一般是按照拼音排序的。这里的拼音就是聚族索引。也就是说聚族索引的组织顺序和数据本身的组织顺序是一致的
,这也解释了数据库中只能定义一个聚族索引的原因,因为数据本身只能按一种方式进行排序。
那聚族
索引有什么
特别的好处呢,这个好处就是在数据库中执行查找一批数据的语句会比较快,因为数据已经按照聚族索引排好序了,很少的io操作就可以将数据 从库中取出。好比你在字典中查找发音从从a到c的汉字,只需要查到a的开始页和c的结束页,中间的所有页都符合查询要求,不用
再一页一页地查找。
图1 聚族索引
三、非聚族索引
非聚族索引就好比字典里的偏旁、笔画索引,其
索引组织顺序和数据组织顺序不一致
,因此非聚族索引可以创建多个。当查找一条数据时,非聚族索引和聚族索引的效率相差不大,但查找一批数据(n)时,非聚族索引需要的io可能是聚族索引的n倍,因为非聚族索引需要一条一条地进行查找。
图2 非聚族索引
四、组合索引
组合索引
在索引的key中保存了所有组成该
组合索引
的字段
,但只按第一个字段进行排序
。 因为索引key中保存的内容增多,因此组合索引
需要的空间一般来说比单字段索引大。
组合索引
的好处是假如你的查询需要返回的数据字段都在
组合索引
的索引字 段中,数据库将不会访问数据页,而直接返回索引中的字段值,可以加快查询速度。假如你的查询不满足这个条件,
组合索引
就是没有意义的,反而浪费了存储空 间。
图3
组合索引
最后出一道小题目,考考大家看懂没有:
假设表中一共有100条数据,索引的B树为三层,查询结果返回50条按照聚族索引排序的数据,不建索引查询、按照聚族索引查询、按照非聚族索引查询所需的io次数各是多少?
分享到:
相关推荐
MySQL提供了多种类型的索引,每种类型的索引都有其独特的用途和特点: 1. **普通索引**:最基本且无唯一性限制的索引类型,可以通过多种方式创建。 - 创建索引:`CREATE INDEX <索引名> ON tablename (列名列表);`...
通常,对逻辑主键使用唯一组合索引,对系统键使用唯一非组合索引,对外键列使用非组合索引。然而,过度索引会导致存储空间浪费,因此需要权衡索引与数据库大小、读写操作的频率。 一些特定的字段不应被索引,例如...
在使用索引时,需要合理设计和优化,避免过度索引和索引不足。过度索引可能导致插入、更新和删除操作变慢,因为每次操作都需要维护索引。另一方面,如果没有合适索引,查询性能可能会大幅下降,尤其是对于大数据量的...
分区表和分区索引是数据库管理系统中的重要概念,它们对于大型数据存储的高效管理和查询具有至关重要的作用。本文将深入探讨这两个主题,帮助你更好地理解它们的原理、用途以及实际应用。 1. 分区表(Partitioning...
MySQL中的索引可以根据用途和存储方式进行分类: 1. **主键索引**:针对表的主键创建的索引,默认自动创建,每个表只能有一个主键索引。 2. **唯一索引**:避免同一表中某列数据重复,可以创建多个唯一索引。 3. **...
- **组合索引:** 基于多列创建的索引,可以包含连续或非连续的列。 **创建示例:** - 创建普通索引: ```sql CREATE INDEX index_name ON tbl_name (column_name); ``` - 创建组合索引: ```sql CREATE INDEX ...
本篇将详细介绍这些索引的特点、用途以及使用技巧,以帮助你更好地进行论文检索和投稿。 一、CNKI(中国知网) CNKI是中国最全面的学术资源数据库之一,包含期刊论文、学位论文、会议论文、报纸文章等多种类型。它...
这段代码的作用是在所有`<li>`元素上应用`.hover()`方法,这是一个组合了`mouseover`和`mouseout`事件的简写形式。当鼠标指针悬停在`<li>`元素上时,会触发内部的匿名函数,这个函数中调用了`.index()`方法。 `....
单列索引和组合索引之间的主要区别在于,单列索引只针对一个列,而组合索引覆盖多个列。在优化查询性能时,选择正确的索引类型至关重要。例如,如果经常同时查询多个列,那么创建一个组合索引可能比单独创建单列索引...
根据不同的特性和用途,索引可以分为以下几类: 1. 聚集索引(Clustered Index):在聚集索引中,数据行的物理顺序与索引顺序是一致的。这意味着表中的数据页会按照索引的顺序存放,一个表只能有一个聚集索引。通常...
- 索引器不强制执行类型安全,因此在使用非整数索引时要特别小心。 8. **索引器的应用场景** - 自定义集合类,如链表、队列等。 - 处理复杂数据结构,如树或图。 - 实现类似于数据库查询的功能,允许按键查找...
5. **表和字段的备注**:添加备注以解释表和字段的用途和含义,增强可读性。 6. **数据保留策略**:对于统计表,应注明保留数据的时间,超出后移至历史库。 7. **索引限制**:每个表的索引不超过5个,单字段索引不...
- 轴向引线电容:常见类型有聚丙烯和聚苯乙烯,适用于高频和低频应用。 - 陶瓷元片电容:小体积、高精度,常用于耦合和旁路电路。 - 解耦圆片电容:用于电源去耦,消除电源线上的噪声。 - 高温电解电容:能在...
3. **索引信息**:描述了哪些表和字段上有索引,是唯一索引还是非唯一索引,以及索引的创建方式(单列索引、组合索引等),这有助于优化查询性能。 4. **视图定义**:如果系统中存在视图,数据字典会提供视图的SQL...
3. **字段(Field)**:字段是表中的最小数据单元,每个字段都有特定的含义和用途。在DWRESCR文档中,字段详细描述了它的业务含义、数据类型、精度、规模等因素,这有助于理解数据的意义和限制。 4. **键(Key)**...
- 组合索引中区分度高的字段应放在最左边,如`where a=? and b=?`,只需对`a`建立索引。 - 当存在非等号和等号混合条件时,等号条件的字段应放在索引最前列,如`where c>? and d=?`,索引应为`idx_d_c`。 遵循...