首页 > 5g > 正文

索引是什么?索引是什么数据结构?索引主要作用

2022-06-20 16:57:15来源:迪族网  

在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的 SQL 语句执行得更快,可快速访问数据库表中的特定信息。

索引是什么数据结构?

索引可能有三种数据结构哈希表、有序数组和N叉树。MySQL使用了B+树。

1.哈希表(散列表)

哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。

因为是使用hash算法对key求值取余得到其在数组的存储位置。

所以,哈希表这种结构适用于只有等值查询的场景,比如 Memcached 及其他一些 NoSQL 引擎。在范围查询中需要全表扫描,是很慢的。

2.有序数组

有序数组在范围查询中优势非常明显,可以采用二分法,能大大缩短查询时间,尤其是数据量比较大时。时间复杂度是时间复杂度是 O(log(N))。如果往中间插入一条数据,就需要把后续数组都往后移,这个时候有序数组的成本就很高了.

所以,有序数组索引只适用于静态存储引擎,

3.二叉树(N叉树)

根据叶子节点的内容,索引类型分为主键索引和非主键索引。

主键索引的叶子节点存的是整行数据。在 InnoDB 里,主键索引也被称为聚簇索引(clustered index)。

非主键索引的叶子节点内容是主键的值。在 InnoDB 里,非主键索引也被称为二级索引(secondary index)。

基于主键索引和普通索引的查询有什么区别?

主键索引的叶子节点存的是整行数据。如果查询条件是主键就能获取整行数据。非主键索引的value是主键Id,如果查询条件是非主键,那么先查非主键索引得到主键id,根据主键Id再查主键索引得到整行数据。

从性能和存储空间方面考量,自增主键往往是比业务字段更合理的选择。可以参考:优化 | InnoDB表一定要用自增列做主键。

索引主要作用

在数据库系统中建立索引主要有以下作用:

(1)快速取数据;

(2)保证数据记录的唯一性;

(3)实现表与表之间的参照完整性;

(4)在使用 ORDER by、group by 子句进行数据检索时,利用索引可以减少排序和分组的时间。

责任编辑:hnmd003

相关阅读

相关阅读

推荐阅读