www.allbetgaming.com:常见的索引模子浅析

admin 4个月前 (06-27) 科技 60 0

  索引的泛起是为了提高数据库查询的效率,就像书的目录一样。常见的索引模子有哈希表、有序数组、B+树。

  • 自适应哈希索引(AHI)

  哈希表是一种常见的数据结构,即通过哈希算法计算出一个数字在表中的位置,并将数字存入该表。哈希索引就是通过哈希表来实现的,一样平常情况下查找时间复杂度为O(1)。InnoDB会监控对表上各索引页的查询,会自动凭据接见的频率和模式为某些热门页确立哈希索引,以是又叫自适应哈希索引,接见模式一样指查询的条件一样。

  好比我们维护一张身份证信息和用户姓名的表,需要凭据身份证号查询姓名,哈希索引也许是这样的:

  哈希索引适合只有等值查询的场景,例如select * from T where index_col = '##'。哈希索引是无序的,若是需要区间查询,那就要把所有数据扫描一遍。

  • 有序数组索引

  有序数组在等值查询和区间查询场景中效率都很高,同样用上面的表举例,索引也许是这样的:

  要查询某条数据或者区间的时刻,使用二分法时间复杂度为O(logN)。但若是需要在中心更新数据时,那么就要移动后面所有的数据。有序数组索引只适用于静态存储引擎,好比保留2019年度学校所有学生信息。

  • B+树索引

  B+树是为磁盘或其他直接存取辅助设备设计的一种平衡查找树。下面是一颗高度为2的B+树,所有纪录都在叶子结点上顺序存放,叶子结点通过指针相连。

  B+树索引就是B+树在数据库中的实现,由于B+索引在数据库中具有高扇出性,在数据库中B+树的高度一样平常为2~4层。查找某一键值的行纪录时最多只需要2~4次IO。以InnoDB的一个整数字段索引为例,这颗B+树也许是1200叉树,这里N叉树的N取决于数据块的巨细。高度为4的时刻就可以存1200的3次方个值,也许为17亿。考虑到树根的数据块总是在内存中,一个10亿行的表上一个整数字段的索引,查找一个值最多只需要接见3次磁盘。

  在InnoDB存储引擎中,表是凭据主键顺序存放的。凭据叶子结点内容,B+树索引又分为聚簇索引和辅助索引。

    • 聚簇索引:根据每张表的主键组织一颗B+树,叶子结点的key是主键值, value是该行的其他字段值,聚簇索引的叶子结点也称为数据页。
    • 辅助索引:叶子结点的内容是主键的值。

我们用一个例子来说明上面的观点,建立一张表,在字段k上有索引:

create table T(
id int primary key, 
k int not null, 
name varchar(16),
index (k))engine=InnoDB;

  表中R1~R5的(ID,k)值分别为(100,1)、(200,2)、(300,3)、(500,5)和(600,6),两颗B+树如下,可以显著看到这两个颗树的区别。

www.allbetgaming.com:常见的索引模子浅析 第1张

  使用通俗索引查询时,例如 select * from T where k = 2,需要先搜索k索引树,获得ID的值为200;再到ID索引搜索一次。这个历程就叫做回表,非主键索引查询需要多搜索一棵树。

  参考资料:《MySQL实战45讲》

       《MySQL手艺内幕:InnoDB存储引擎》第二版

,

环球UG

欢迎进入环球UG官网(UG环球):www.ugbet.us,环球UG官方网站:www.ugbet.net开放环球UG网址访问、环球UG会员注册、环球UG代理申请、环球UG电脑客户端、环球UG手机版下载等业务。

Allbet声明:该文看法仅代表作者自己,与本平台无关。转载请注明:www.allbetgaming.com:常见的索引模子浅析

网友评论

  • (*)

最新评论

站点信息

  • 文章总数:437
  • 页面总数:0
  • 分类总数:8
  • 标签总数:970
  • 评论总数:117
  • 浏览总数:3358