不同类型的MySQL索引有哪些?

来源:站长论坛作者:不吃香菜头衔:草根站长
导读:本期聚焦于小伙伴创作的《不同类型的MySQL索引有哪些?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《不同类型的MySQL索引有哪些?》有用,将其分享出去将是对创作者最好的鼓励。

MySQL作为主流的关系型数据库,提供了多种不同类型的索引来适配各类查询需求,合理选择索引类型能大幅提升数据库的读写性能。不同索引的底层实现逻辑不同,适用的查询场景也有明显差异,开发者需要结合业务特点选择合适的索引类型。

不同类型的MySQL索引有哪些?

常见MySQL索引类型介绍

1. B树索引(B+树索引)

B树索引是MySQL中最常用的索引类型,InnoDB和MyISAM存储引擎的默认索引都是B+树结构。它的底层是多路平衡查找树,所有数据都存储在叶子节点,并且叶子节点之间通过双向链表连接,支持范围查询和排序操作。

B树索引适用于等值查询、范围查询、排序查询、分组查询等大部分常见查询场景,比如根据主键查询、根据创建时间范围查询数据等。创建普通索引、唯一索引、主键索引时,默认都是B树索引。

创建B树索引的示例代码如下:

-- 创建普通B树索引
CREATE INDEX idx_user_name ON user_table(user_name);

-- 创建唯一B树索引
CREATE UNIQUE INDEX idx_user_email ON user_table(user_email);

-- 创建主键索引(默认是B树结构)
ALTER TABLE user_table ADD PRIMARY KEY(id);

2. 哈希索引

哈希索引基于哈希表实现,通过对索引列的值计算哈希值,快速定位数据位置,等值查询的效率极高,时间复杂度接近O(1)。但哈希索引不支持范围查询、排序查询,也不支持部分索引列匹配查询,因为哈希值是无序的。

Memory存储引擎默认支持哈希索引,InnoDB存储引擎有自适应哈希索引功能,会自动为频繁访问的等值查询索引页构建哈希索引,提升查询效率。哈希索引适合只做等值查询、对查询速度要求极高的场景。

创建哈希索引的示例代码如下:

-- Memory引擎创建哈希索引
CREATE TABLE temp_user (
    id INT,
    user_name VARCHAR(50),
    INDEX idx_name USING HASH (user_name)
) ENGINE=MEMORY;

3. 全文索引

全文索引主要用于文本内容的模糊匹配查询,比如文章内容、商品描述等字段的搜索。它通过对文本内容进行分词,建立关键词和文档的映射关系,比使用LIKE '%关键词%'的查询效率高很多。

MySQL5.6之后InnoDB引擎支持全文索引,默认的分词器对中文的支持有限,实际使用中可能需要配合ngram分词插件使用。全文索引适合需要做大文本搜索的场景,比如博客系统的文章搜索、电商系统的商品搜索等。

创建和使用全文索引的示例代码如下:

-- 创建全文索引
CREATE FULLTEXT INDEX idx_article_content ON article_table(content) WITH PARSER ngram;

-- 使用全文索引查询包含MySQL关键词的文章
SELECT * FROM article_table WHERE MATCH(content) AGAINST('MySQL');

4. 空间索引

空间索引用于地理空间数据类型的查询,比如GEOMETRYPOINTLINESTRINGPOLYGON等类型的数据,支持空间关系的判断,比如查询某个范围内的地理位置、判断两个地理区域是否相交等。

空间索引只能在MyISAM和InnoDB(MySQL5.7.6之后)存储引擎中使用,并且索引列必须为非空。适合存储地理位置信息、需要做空间查询的业务场景,比如外卖系统的配送范围判断、地图应用的周边查询等。

创建空间索引的示例代码如下:

-- 创建空间索引
CREATE SPATIAL INDEX idx_shop_location ON shop_table(location);

-- 查询距离指定点10公里内的店铺
SELECT * FROM shop_table WHERE ST_Distance_Sphere(location, ST_GeomFromText('POINT(116.397 39.908)')) <= 10000;

不同类型索引的对比

为了更清晰地了解各类索引的特点,以下是不同索引的对比表格:

索引类型底层实现支持等值查询支持范围查询支持排序适用场景
B树索引B+树大部分常规查询场景
哈希索引哈希表高频等值查询场景
全文索引倒排索引是(文本匹配)大文本搜索场景
空间索引R树是(空间关系判断)是(空间范围)地理空间数据查询场景

索引使用注意事项

  • 不要盲目创建索引,索引会占用额外的存储空间,并且会降低插入、更新、删除操作的效率,一般建议只为频繁查询的字段创建索引。
  • 选择区分度高的列作为索引列,区分度越高的索引,过滤数据的效果越好,比如用户表的手机号字段比性别字段更适合做索引。
  • 如果查询条件中使用了函数或者表达式操作索引列,会导致索引失效,比如WHERE YEAR(create_time) = 2023无法使用create_time列的索引。
  • 联合索引需要遵循最左前缀原则,比如联合索引是(a,b,c),那么查询条件中用到a、a和b、a和b和c的情况才能命中索引,只用b或者c无法命中索引。

MySQL索引B树索引哈希索引全文索引修改时间:2026-07-07 09:24:31

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。