提升品牌曝光量,让客户主动发现你广告

服务热线:18510193015

首页 > 优化方案 > 【索引】索引的介绍与优化三生石1314

【索引】索引的介绍与优化三生石1314

发布时间:2024-11-13 14:57:14     来源: 联岸传媒集团

如果您有SEO优化、网站建设需求请致电:18510193015

1. 索引基础探究

索引,乃是存储引擎用以快速定位记录的数据架构。

1.1 索引的多样类型

1.1.1 B + 树剖析

B + 树属于多路搜索树类别。

B + 树能够显著提升数据访问速率,无需对全表进行扫描来查询数据,其搜索起始于根节点,根节点存有子节点的指针,借此精准选定正确的子节点展开查找,进而获取对应数值。

可借助 B - Tree 实施的查询类型如下:

以如下表为例阐释查询类型

Create Table People {

f_name varchar(50) not null,

l_name varchar(50) not null,

birth date not null,

gender enum('m', 'f') not null,

key(f_name, l_name, birth)

}

全值匹配:与索引中的全部列相契合,例如:查找 f_name 为‘Allen’,l_name 为‘Cuba’且生日是 '1990 - 01 - 01' 的记录。

匹配最左前缀:匹配最左侧的前几列,如查找 f_name 为‘Allen’且 l_name 为‘Cuba’的记录。

匹配列前缀:匹配某一列值的起始部分,例如查找 f_name 为‘Allen’且 l_name 中首字为‘C’的记录。

匹配范围值:用于查找 f_name 在 'Allen' 与 'Barrymore' 之间的记录。

索引的局限性:

若并非从索引的最左列起始则无法运用索引

不能跨越索引中的列进行查询

若查询中某列存在范围查询,则其右侧的索引均无法启用

哈希索引解读

哈希索引借助 Hash 表予以实现,仅在精确匹配时有效,存储引擎为每一列额外添加一个依据索引列计算得出的索引值,并且不同的值会生成各异的索引,hash 存储于索引之中,同时在 hash 表内留存指向每行数据的指针。

限制条件

索引自身仅需存储 hash 值,故而无法凭借索引中的值来规避读取行数据的操作。

无法进行排序

仅支持等值查找,不支持匹配查找。

存在 hash 冲突现象。

全文索引简述

这是一种特殊的索引形式,主要用于查找文中的关键词,而非对比索引的值,类似于搜索引擎的工作原理,需留意:停用词、词干和复数、布尔搜索等方面。

1.2 索引的优劣之处

有效削减了服务器所需扫描的数据规模。

规避了排序与临时表的生成。

将随机 I/O 转换为顺序 I/O。

索引的类别划分

唯一索引:既能加速查询进程,又能确保列值的唯一性。

主键索引:可加速查询且列值具有唯一性。

组合索引:由多列值共同构建而成的索引。

覆盖索引:索引涵盖了查询所需的所有列,查询时仅需执行一次查询操作即可获取结果数据。

聚簇索引

其叶子结点存储的是数据而非数据指针。

优点:

将数据集中存储。

数据访问速度较快。

运用覆盖索引能够直接获取主键值。

缺点:

插入速度受插入数据量的影响。

更新操作的代价颇高。

在表中插入新行或者主键被更新且需要移动数据时,可能引发页分裂现象。

全表扫描的效率降低。

二级索引规模较大,由于二级索引的叶子结点包含主键的值,所以可能需要额外的一次 I/O 操作。

非聚簇索引

其叶子结点为数据指针而非数据本身。

InnoDB 与 myisam 的对比分析

数据分布情况

InnoDB

myisam