`

索引相关(二)

阅读更多
索引相关


一、InnoDB 与 MyISAM 对比

存储引擎InnoDBMyISAM
存储结构InnoDB表空间数据文件和它的日志文件;表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引MyISAM表建立三个不同的文件;表定义、数据文件、索引文件
索引的数据结构B+树B+树
叶子节点的键值KEY表的主键(一般主键INT无符号自增)索引的相应字段的值
叶子节点的DATA域保存完整的数据记录数据记录的地址,即数据文件中的每行数据的地址
辅助索引辅助索引data域存储相应记录主键的值而不是地址与主索引在结构上无区别,主索引不可以重复,辅助索引可以
索引的类型聚集索引非聚集索引
全文索引、压缩索引不支持支持
主辅索引IAnnoDB主键节点同时保存数据行,其他辅助索引保存的是主键索引的值MyISAM顺序储存数据,索引叶子节点保存对应数据行地址,辅助索引很主键索引相差无几
数据存储InnoDB键值一起保存,索引与数据一起载入InnoDB缓冲池MyISAM键值分离,索引载入内存(key_buffer_size),数据缓存依赖操作系统
索引顺序升序;优点:缩短索引键值的大小;缺点:不支持倒叙提取索引不一定


博文参考:
由浅入深探究mysql索引结构原理、性能分析与优化


二、注意事项

1.InnoDB本身按照主键作为KEY形成的B+树结构,所以表必须有主键;无主键,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形

2.InnoDB不建议使用过长的字段作为主键,因为辅助索引在检索时是通过查找主索引来间接实现的;那么辅助索引的节点的data域中存放主索引的值,因为主索引很长,索引存储空间会加大

3.InnoDB主键单调,因为InnoDB的数据文件整体是一个B+树的结构,如果出现重复的数据,会不断的调整B+树的结构,增加维护成本及时间

4.InnoDB中辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录

博文参考:
MySQL索引背后的数据结构及算法原理

三、名词解释

存储引擎聚集索引非聚集索引
定义索引中键值的逻辑顺序决定了表中相应行的物理顺序;检索范围数据快速,数据已经按照顺序排序,而无需进行数据排序处理;索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同
叶子节点索引的叶节点就是数据节点;如InnoDB的B+树的索引结构中DATA中存放数据的完整记录叶节点存放的是索引节点,有一个指针指向对应的数据块;如MyISAM的B+树的索引结构中DATA中存放指向数据表中记录的物理地址
数量每个表中只能有一个根据实际使用索引的情况而定


博文参考:
聚集索引和非聚集索引
分享到:
评论

相关推荐

    nachos二级索引文件系统结题报告及源代码

    在本项目中,我们主要探讨的是“nachos二级索引文件系统”,这是一个与操作系统相关的实验,特别是关于文件系统的改进。 Nachos是一个开源的操作系统教学平台,它为学生提供了理解和实现操作系统基本概念的机会。在...

    分区索引,本地索引,全局索引的区别

    本地索引是一种特殊的分区索引,它与表的分区紧密相关,即索引的分区策略完全遵循表的分区策略。 ##### 1. 特点: - **分区机制**:本地索引的分区键等同于表的分区键,分区数也等同于表的分区数。 - **前缀索引**...

    Oracle索引优化相关

    #### 二、组合索引 组合索引是指包含多个列的索引。这种类型的索引可以在某些情况下提高查询效率。例如,在Oracle 9i版本之前,如果一个组合索引的第一个列没有出现在WHERE子句中,那么Oracle将无法利用这个索引来...

    二维网格索引

    以下将详细介绍基于Java的二维网格索引及其相关知识点。 1. **二维网格的基本概念** - 二维网格将空间区域划分为小的、均匀大小的单元,每个单元都有一个唯一的标识,即网格索引。这种方法简化了大规模空间数据的...

    360HBASE二级索引的设计与实践

    4. **写路径**:在数据写入时,除了将数据写入到相应的Region中,还需要同时更新相关的二级索引。这意味着数据写入过程会变得更加复杂,但为了保证查询效率这是必要的。 5. **读路径**:在执行查询时,首先根据二级...

    InDesignCC2021 中文索引插件

    例如,在一本科技类图书中,可以将一级索引设为大类别(如“计算机科学”),二级索引为子类别(如“编程语言”),三级索引为具体语言(如“Python”),四级索引则可以是特定的函数或概念(如“Python的for循环”...

    索引

    位图索引则适用于处理布尔值或有限范围的数值,通过一系列的二进制位来表示数据是否存在。 索引在数据库系统中扮演着关键角色。当我们对一个表进行查询时,如果没有索引,数据库需要执行全表扫描,即逐行检查直到...

    hbase+solr创建二级索引完整操作

    - 收集与索引操作相关的日志信息。 #### 五、注意事项 - 在执行上述操作之前,请确保集群中的Zookeeper IP地址已被替换为您自己的集群IP地址。 - 在修改配置文件前做好备份工作,以防配置出错导致的数据丢失。 - ...

    索引类型-说明(索引文件有数据文件和索引表文件组成)

    例如,一级索引可能包含对二级索引的引用,二级索引再指向数据文件中的具体记录。 接着,我们了解几种常见的文件组织形式: 1. 顺序文件:这是最基础的文件组织形式,数据按照一定的顺序存储,查找时需从头开始...

    70 针对主键之外的字段建立的二级索引,又是如何运作的?l.pdf

    每当有数据插入、删除或更新时,不仅需要在聚簇索引中更新数据,还需要在所有相关的索引上进行调整。在创建索引时,要考虑到这些成本和对查询性能的提升之间的平衡。 总的来说,二级索引为数据库提供了基于非主键...

    nachos二级索引文件系统报告(附源代码)

    这个压缩包文件“nachos二级索引文件系统报告(附源代码)”包含了对Nachos操作系统中二级索引文件系统改进的详细研究和实现过程,以及相关的源代码。 首先,我们来深入理解二级索引文件系统。在传统的文件系统中,...

    基于二级索引结构的图压缩算法

    该算法利用有序的键值(Key-Value)结构将相关节点和边尽可能地以相邻的方式 存储,并为高效的属性查询和邻居查询分别构造二级索引和 hash 节点索引。此外,为了节省存储空间,GComIdx 算法采用压缩算法来降低图数据...

    MySQL 索引最佳实践

    - **避免过度索引**:过多的索引会增加写入操作的时间,因为每次写入都需要更新所有相关的索引。 - **考虑查询模式**:索引应根据最常用的查询模式进行设计,优先考虑那些能带来最大性能提升的查询。 - **使用复合...

    oracle 创建和删除索引

    #### 二、创建索引 根据提供的描述,创建索引的具体命令为: ```sql CREATE INDEX CUS_LOWER_ENERGY_JLDNY ON CUS_LOWER_ENERGY (JLDBH, DLNY, HWBZ) TABLESPACE TS_DSM_INDEX PCTFREE 10 INITRANS 2 MAXTRANS...

    SQL SERVER建立索引.pdf

    ### SQL Server 建立索引相关知识点 #### 一、建立索引 索引是在数据库表中的数据列上创建的一种特殊的数据结构,其目的是为了加快数据检索速度。索引类似于书籍的目录,通过索引可以快速定位到所需的数据行,从而...

    索引总结 ,多年使用,工作培训

    3. **索引的独立性**:索引在逻辑上和物理上都与相关的表和数据无关。这意味着即使创建或删除了一个索引,也不会对基本表的数据产生影响。 4. **索引的自动管理**:索引一旦建立,在表上进行DML操作时(如插入、修改...

    JavaScript中的快速静态二维空间索引

    在JavaScript开发中,静态二维空间索引是一种优化技术,用于高效地管理和检索二维坐标系统中的对象,例如点或矩形。这种索引方法通常应用于游戏开发、地理信息系统、图形渲染等场景,它允许我们快速查询特定区域内...

    nexus index 索引手动更新

    Nexus是Sonatype公司开发的一款强大的 Maven、NuGet、npm、RubyGems、Pypi等软件包管理器,它提供了一种集中式的方式来管理和...同时,了解并利用好提供的相关资源,如压缩包中的文档和工具,将使得这个过程更加顺畅。

    MS Sql 2005 全文索引

    #### 14.8 2005 新增:与全文索引相关的 T-SQL 语句 - **14.8.1 创建全文目录**:使用 `CREATE FULLTEXT CATALOG` 语句创建全文目录。 - **14.8.2 更改全文目录属性**:使用 `ALTER FULLTEXT CATALOG` 语句修改已...

    数据库索引创建建议

    - **非聚集索引**:如果经常需要根据客户ID或产品ID查询相关的交易记录,可以在这些列上建立非聚集索引,以提高单个记录查询的效率。 综上所述,合理的索引设计对于提高数据库性能至关重要。选择正确的索引类型需要...

Global site tag (gtag.js) - Google Analytics