索引

83 阅读2分钟

1、索引是帮助Mysql高效获取数据的 排好序 的结构 如果不加索引,查找数据时,需要逐行读取数据,数据保存在磁盘上,每读取一次进行一次I/O,影响性能,数据多时查找慢。

2、索引的数据结构 B-tree Hash R-tree (Spatial indexes use R-trees, which are specialized data structures for indexing multi-dimensional data) Full-text (Full-text indexes are created on text-based columns (CHAR, VARCHAR, or TEXT columns) to speed up queries and DML operations on data contained within those columns.) 我们平常所说的索引,没有特别说明时,指的是B+tree结构

image.png B-tree 高度固定,一个节点存多个数据。叶节点具有相同深度,叶节点指针为空,所有索引元素补不重复,节点中的索引从左到右递增排列。查找时,一个 load 一个节点的数据到内存中,在内存中对比,比对的时间相对 I/O 几乎可以忽略不计 B+tree,是 B-tree 的变种,非叶子节点不存储 data,只存索引(冗余),可以放更多索引(相同的节点大小);父节点存的是右孩子第一个元素的索引;叶子节点包含所有索引字段,叶子节点用指针链接,提高区间访问性能。相同的字节大小和数据量,B-tree 的高度很可能大于 B+tree,因为 B+tree 的非叶子节点不存 data。联合索引多个数据存入一个节点。 hash,对索引元素进行 hash 计算,获取散列值,散列值在hash表中与数据的磁盘地址一一对应,能快速定个位到数据,不支持范围查找

3、索引类型

image.png

4、使用索引的优点 唯一所以可以保证数据库表中每行数据的唯一性 可以加快数据检索速度 可以加速表与表之间的连接 使用分组和排序子句查询数据时,可以显著减少查询中分组和排序的时间

5、使用索引的缺点 创建索引和维护索引消耗时间,时间随着数据量的增加而增加 索引占用物理空间,除了数据表占数据空间之外,每个索引要占用一定物理空间,如果建立聚簇索引,需要的空间更大 当对表中的数据进行增、删、改时,索引也要动态维护,降低数据的维护速度