首页 > 数据库 >MySQL 的索引类型有哪些?

MySQL 的索引类型有哪些?

时间:2024-12-14 22:20:49浏览次数:8  
标签:场景 哪些 适用 查询 索引 MySQL 主键

MySQL 的索引类型

MySQL 提供多种索引类型,用于优化数据查询性能。每种索引类型在存储结构、适用场景和性能特性方面各不相同。


1. 常见的索引类型

(1)B+树索引

  • 结构:基于 B+ 树实现,是 MySQL 中最常见的索引类型。
  • 特点
    • 索引节点按照键值从小到大顺序排列。
    • 叶子节点之间通过指针连接,便于范围查询。
    • 支持等值查询、范围查询和排序。
  • 适用场景
    • 主键索引、唯一索引和普通索引。

(2)哈希索引

  • 结构:基于哈希表实现。
  • 特点
    • 查询效率高,但仅支持精确匹配,不支持范围查询和排序。
    • 无法利用部分键匹配。
  • 适用场景
    • 精确匹配查询,例如 MEMORY 存储引擎默认使用哈希索引。

(3)全文索引(FULLTEXT)

  • 特点
    • 用于高效地执行全文搜索。
    • 支持自然语言模式和布尔模式搜索。
    • 索引内容是文本类型的列。
  • 适用场景
    • 大量文本内容的搜索,如博客、文章和评论。

(4)空间索引(SPATIAL)

  • 特点
    • 专为地理数据设计,用于处理二维空间数据。
    • 仅支持 MyISAMInnoDB(部分版本)存储引擎。
    • 索引列必须是空间数据类型(如 GEOMETRY)。
  • 适用场景
    • 地理位置查询和空间数据分析。

2. 根据索引功能分类

(1)主键索引

  • 特点
    • 每个表只能有一个主键索引。
    • 自动创建的聚簇索引,数据存储按主键顺序组织。
  • 适用场景
    • 确保表中每行数据唯一标识。

(2)唯一索引

  • 特点
    • 保证索引列的值唯一(但可以包含 NULL)。
    • 非聚簇索引。
  • 适用场景
    • 唯一标识某些字段(如邮箱、用户名)。

(3)普通索引

  • 特点
    • 无任何约束,仅用于提高查询效率。
  • 适用场景
    • 频繁查询但无唯一性要求的列。

(4)组合索引

  • 特点
    • 在多个列上创建的索引,遵循“最左前缀匹配原则”。
    • 适合多条件查询,减少单独索引的数量。
  • 适用场景
    • 多列条件查询(如 WHERE a = ? AND b = ?)。

(5)覆盖索引

  • 特点
    • 查询的所有列都在索引中,避免回表操作。
  • 适用场景
    • SELECT 查询中只涉及索引列的查询。

(6)前缀索引

  • 特点
    • 对字符串列的前 N 个字符建立索引。
    • 减少索引存储空间,但可能增加重复值。
  • 适用场景
    • 长字符串列(如 URL、邮箱地址)。

3. 索引的选择与应用

(1)B+树索引的优点

  • 支持等值查询、范围查询、排序等。
  • 使用范围最广,默认索引类型。

(2)哈希索引的适用场景

  • 仅适合精确匹配查询。
  • 不支持范围查询和排序。

(3)组合索引的优化

  • 减少单列索引的数量。
  • 遵循“最左前缀匹配原则”,提高查询性能。

(4)全文索引的适用场景

  • 大量文本数据的模糊搜索。

4. 总结

索引类型 结构 特点 适用场景
B+树索引 B+ 树 支持范围查询、排序,最常用索引类型 普通查询、主键索引、唯一索引
哈希索引 哈希表 精确匹配查询,查询速度快,不支持范围查询 精确匹配查询
全文索引 特殊文本索引 用于全文搜索,支持自然语言模式和布尔模式 文本字段的模糊搜索
空间索引 R 树 处理地理位置数据,支持二维空间查询 地理位置分析和空间数据查询
主键索引 B+ 树 聚簇索引,保证数据行唯一 唯一标识每行数据
唯一索引 B+ 树 保证列值唯一,支持快速查询 唯一性要求的列
普通索引 B+ 树 无约束条件,仅提高查询效率 经常被查询但无唯一性要求的列
组合索引 B+ 树 多列组合索引,遵循最左前缀原则 多条件联合查询
前缀索引 B+ 树(部分列) 节省存储空间,但可能增加重复值 长字符串列
覆盖索引 B+ 树 避免回表,查询性能高 查询涉及索引列

根据业务场景选择合适的索引类型,是优化 MySQL 查询性能的关键。

标签:场景,哪些,适用,查询,索引,MySQL,主键
From: https://www.cnblogs.com/eiffelzero/p/18607347

相关文章

  • MySQL中这14个神仙功能,惊艳到我了!!!
    大家好,我是苏三,又跟大家见面了。前言我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。1.group_concat在我们平常的工作中,使用groupby进行分组的场景,是非常多的。比如想统计出用户表中,名称不同的用户的具体名称有哪些?......
  • 第4章 Doris数据库与表设计-四种Doris索引的详细使用
    4.4.1表索引概述从加速的查询和原理来看,ApacheDoris的索引分为点查索引和跳数索引两大类。(1)点查索引:常用于加速点查,原理是通过索引定位到满足WHERE条件的有哪些行,直接读取那些行。点查索引在满足条件的行比较少时效果很好。ApacheDoris的点查索引包括前缀索引和倒排......
  • 数据库查询性能优化-正确使用索引避免全表扫描
    优化查询最重要的就是,尽量使语句符合查询优化器的规则避免全表扫描而使用索引查询。具体要注意的:1.应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描。如:selectidfromtwherenumisnull可以在num上设置默认值0,确保表中num列没......
  • MySQL coredump 了
    背景基础环境:操作系统:DB:RetHet 7.8存储:SSD内存:16GCPU核数:16CORE数据库环境:5.7.12事务隔离级别:RR 问题现象:应用反馈 出现了大量的数据库连接报错,之后恢复正常。MySQL日志显示数据库似乎崩溃了。排查原因1、大量数据库连接报错,根据经验第一反应是网络的问题造......
  • php毕业设计期末作业购物商城php+mysql+html在线购物系统购物商城购物网站宠物商城电
     一,功能介绍        前台主要包括网站首页、商品推荐、最新商品、新闻咨询、商品分类、商品资讯、评论、登录、注册、加入购物车、结算、个人中心等功能模块商品推荐、最新商品在商品推荐、最新商品模块,用户可以查看全部商品信息,选择商品进行添加购物车等操作,购......
  • MySQL Limit 分页查询优化
    前言在各类系统的表格类信息展示的功能中,经常会用到“翻页”这个操作,在页面上每次只展示有限的数据,需要看其他数据的时候则像翻书一样翻到后面的“页”。在MySQL支持的SQL语法中对此有特殊的支持,开发人员在实现这类功能的时候很方便:select*fromxxxlimitM,Nselect*f......
  • Python爬取数据插入mysql(简易记录)
    importmysql.connectorimportrequestsfromlxmlimporthtml#连接MySQL数据库db=mysql.connector.connect(host="?",user="?",password="?",database="?")cursor=db.cursor()company_url=......
  • 光伏逆变器负载的维护和保养方法有哪些?
    光伏逆变器是光伏发电系统中的关键设备,它将太阳能电池板产生的直流电转换为交流电,为家庭和工业用电提供稳定的电力。为了保证光伏逆变器的正常运行和延长其使用寿命,我们需要对其进行定期的维护和保养。以下是一些建议:清洁:定期清洁光伏逆变器的外壳和散热片,以保持良好的散热效果。......
  • 交流负载箱的安全事项和注意事项有哪些?
    交流负载箱用于模拟实际负载的电气设备,广泛应用于电力系统、通信系统、自动化控制系统等领域。在使用过程中,为确保人身和设备安全,需要注意以下安全事项和注意事项:选择合适的交流负载箱:根据实际需求选择合适的交流负载箱,确保其容量、电压等级等参数满足使用要求。同时,要选择具有质......
  • mysql-搭建主从复制
    mysql-搭建主从复制Master(主):dockerrun-p3339:3306--namemaster-eMYSQL_ROOT_PASSWORD=123456-dmysql:5.7Slave(从):dockerrun-p3340:3306--nameslave-eMYSQL_ROOT_PASSWORD=123456-dmysql:5.7Master对外映射的端口是3339,Slave对外映射的端口是3340。因为do......