数据库索引类型有哪些?

结论: 稠密索引的每一行对应一个索引,速度快但占用空间;稀疏索引是块索引,节省空间但速度慢。
您选择哪一种取决于您的需求。
选择性差的数据更适合密集。

数据库中的索引是什么

坦率地说,索引是一种加快数据搜索速度的工具。
这是一个特殊的小表,记录了两个字段:一个是你要搜索的关键词,另一个是这个关键词在数据库中的具体地址。

例如,当你看书时,你必须看目录,对吧?章节名称和页码写在目录中。
索引看起来像这样。
没有索引,就得一页一页地翻动,速度非常慢。
有一个索引,因此您可以直接查看目录来查找页码,它很快就会消失。

同样的事情也发生在数据库中。
您检查数据,例如 SELECT FROM table WHERE id=1 00。
数据库首先检查id列是否有索引。
有一个索引。
直接去索引表找到id=1 00对应的地址,然后直接去那里取数据。
如果没有索引,它必须从第一行开始逐行扫描,直到找到 id=1 00 的行。

当数据量很大时,索引的好处就很明显了。
例如,如果有一百万条数据,不建立索引可能需要几秒,但建立索引可能只需要毫秒。

使用空格的索引表。
一旦数据更新,索引也必须改变。
因此,并不是所有的表都适合创建索引。
索引最适合读多写少的表。
对于较旧的更新表,索引过多会减慢进程,因为每次更新时都必须更改索引。

在选择构建索引的字段时还需要小心。
例如,对于每个值都不同的字段(例如唯一ID),索引是有效的。
对于有很多重复值的字段(比如性别,只有男性和女性),建立索引是没有意义的。

简而言之,索引就是一张小表,可以让你更快地找到数据,但必须用在正确的地方。

Mysql 索引简介

2 02 3 年 3 月 1 5 日。
您询问的是 MySQL 索引。

索引的目的是加快搜索速度。

就像图书目录。
快速找到位置。

减少全表扫描。

1 .核心角色 1 . 加快搜索速度 将随机搜索更改为顺序搜索。
无需扫描整个表。

2 优化排序 由于索引中有行字段,因此不需要额外的行。

3 实施限制 主键是唯一约束。
外键也依赖它。

2 常用型号 1 . 哈希模型
定义:键值对的存储。

使用哈希计算位置。

冲突使用链表。


特点:
检查:快速等效搜索 (O(1 ))。

检查:要检查范围,请扫描整个区域。


用途:
键值存储(例如Redis)。

更多地检查等价性。


限制:
无法搜索范围(id>3 是不可能的)。

无法排序。

2 阵列模型
定义:存储一个有序数组。

使用二分查找。


特点:
检查:O(logN)。

用途:
检查更多时间段。

数据变化不大。


限制:
插入和删除需要移动大量数据。

效率低下。

3 N叉树(B+树)
定义:多树。

数据存储在工作表中。

没有翅膀的按钮和手。


特点:
检查:O(logN)。

这棵树有3 -4 层楼高。

可以存储数十亿数据。

支持范围搜索(工作表有链接列表)。

减少 I/O。

节点大小分配给磁盘块(InnoDB默认1 6 KB)。


用途:
MySQL InnoDB 默认索引。

3 MySQL InnoDB 实现 1 .IOT(索引组织表)
表数据是按照主键存储的。

该表是聚集索引。

没有主键时使用ROWID。

2 B+树结构
非叶子:存储键和指针。

工作表:存储数据或主键。

辅助索引:存储主键。

3 索引用例
聚集索引:主键(id)。

二级索引:INDEX(名称)。

首先检查索引来获取主键。

返回表检索数据。

4 优化点
覆盖指数:
索引包含所有搜索字段。

避免退货。

索引选择性:
具有唯一值的多个列适合索引。

工会索引:
最左边前缀的原理。

INDEX(a,b) 无法检查 a,b=2
4 局限性
空间要求大。

写的很慢。

可能无效:
函数运算(WHERE YEAR(日期)=2 02 3 )。

!=,不在。

隐式类型转换。

算了。
由你决定。