MySQL支持的索引类型有哪些?

B - Tree索引

  • 结构:一种多路平衡查找树,数据存储在叶子节点,内部节点保存索引信息。每个节点可包含多个子节点,通过关键字将数据划分到不同子树。
  • 特点:具有高度平衡性,所有叶子节点深度相同,查询时间复杂度为O(logn);关键字有序排列,支持范围查询和排序操作;每个节点能存储多个关键字,降低树的高度,提升查询效率;支持动态插入和删除操作,自动调整结构保持平衡。
  • 应用场景:适用于等值查询,如通过主键或唯一键精确查找;适合范围查询,例如WHERE age BETWEEN 20 AND 30;执行ORDER BYGROUP BY时,可利用其快速排序;多列组合查询时,使用复合B - Tree索引能提高查询效率。
  • 优缺点:优点是支持高效的等值和范围查询,具备动态平衡性,适应数据的增删改,支持多列组合提升复合查询性能;缺点是对于文本搜索等特殊类型查询效率较低,在高并发写操作下可能引发锁竞争影响性能 。在MySQL中主要用于InnoDB和MyISAM存储引擎,是最常用的索引类型。

哈希索引

  • 结构:基于哈希表实现,将关键字通过哈希函数转换为哈希值,以此快速定位数据存储位置。哈希表由一组桶组成,每个桶存储一个或多个记录。
  • 特点:查找速度快,理想情况下时间复杂度为常数级别O(1);不保持数据有序性,仅适用于等值查询;存在哈希冲突问题,即不同关键字可能映射到相同哈希值,需通过链表或开放地址法等解决;哈希表大小一旦确定,扩展困难,可能造成空间浪费或过多哈希冲突。
  • 应用场景:适合通过精确匹配关键字进行的等值查询,如WHERE id = 100;适用于高频率的缓存场景,因其查找速度极快。
  • 优缺点:优点是查找速度极快,适合高效的等值查询,实现简单,适合固定大小的哈希表;缺点是仅支持等值查询,无法进行范围查询,哈希冲突可能导致性能下降,不支持有序遍历,无法用于排序操作,动态扩展困难,适应性较差。在MySQL中,主要用于Memory存储引擎,InnoDB和MyISAM等存储引擎不直接支持。

全文本索引

  • 结构:通过创建倒排索引,将每个单词映射到包含该单词的文档或记录。倒排索引包含词项表(存储所有出现过的单词)和文档列表(每个单词对应包含该单词的记录的文档id列表)。
  • 特点:专门优化文本搜索,可快速查找文本字段中的关键词或短语;支持AND、OR、NOT等布尔逻辑操作,能提供复杂搜索条件;能根据词频、逆文档频率等因素对搜索结果进行相关性排名;默认不支持词项的前缀匹配,需通过配置或特定语法实现。
  • 应用场景:适用于需要对大量文本进行关键词搜索的应用,如博客、新闻网站等的搜索引擎;可用于快速查找包含特定关键词的文章或文档;在评论系统中,可搜索用户评论中的特定词汇,提升用户体验。
  • 优缺点:优点是提供高效的文本搜索能力,支持复杂搜索语法和逻辑,能根据相关性排序提高搜索结果质量;缺点是对存储空间要求较高,倒排索引占用较多空间,更新索引开销较大,不适合频繁修改的文本数据,对于短文本或关键词较少的场景效果有限。在MySQL中,支持InnoDB和MyISAM存储引擎,但不同版本支持情况有差异 。

空间索引

  • 结构:在MySQL中主要基于R - Tree结构实现,这是一种多路搜索树,适用于存储多维空间数据。通过递归地将空间对象划分为矩形边界框,层层嵌套形成树状结构。
  • 特点:支持多维空间数据,如二维或三维坐标;适合执行范围查询和邻近查询,能快速定位空间范围内的对象;利用矩形边界框的嵌套形成层次结构,减少不必要的比较操作;层次结构可减少冗余存储,提高存储效率。
  • 应用场景:常用于地理信息系统(GIS),存储和查询地图上的地理位置、路径、区域等信息;在移动应用的位置服务中,可快速查找附近的地点、餐馆、商店等;在图形应用中用于碰撞检测和空间关系分析;也可用于游戏开发等场景 。

此外,从约束角度还可分为:

主键索引

是一种特殊的唯一索引,用于唯一标识表中的每一行记录,一张表只能有一个主键索引,且主键值不能为空。它基于B - Tree结构实现,能加快基于主键的查询速度,同时保证数据的唯一性和完整性。

唯一索引

确保索引列中的值是唯一的,但允许有空值(如果有多个空值,它们被视为相同)。其作用是保证数据的唯一性,可基于B - Tree或哈希结构(取决于存储引擎和具体情况),在查询时也能提高查找效率。

普通索引

最基本的索引类型,没有唯一性等约束,主要作用是加快对数据的查询速度,可以创建在单列或多列上,基于B - Tree等结构实现 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值