mysql索引类型有哪些:选型实操指南

mysql索引类型有哪些,主流分为B+树索引、哈希索引、全文索引、空间索引,InnoDB引擎默认使用B+树索引,MyISAM同时支持B+树与全文索引,你在普通业务查询场景优先选用B+树索引,等值查询且无范围筛选场景可选用哈希索引,长文本内容检索选用全文索引,地理坐标数据查询选用空间索引;该分类体系仅适用于MySQL5.7及MySQL8.0稳定版本,不兼容MariaDB分支引擎,存储引擎不同会直接决定可用索引类型,不能跨引擎套用索引方案。

mysql索引类型:B+树索引

B+树索引是业务开发里最常用的索引类型,分为主键索引与二级索引两类,主键索引也叫聚簇索引,数据表数据会直接存放在索引叶子节点,二级索引是非聚簇索引,叶子节点只保存主键值,查询时需要回表获取完整行数据。B+树支持等值匹配、范围查询、排序与分组操作,叶子节点通过链表串联,顺序读取数据效率较高。你建立联合索引时,要遵循最左前缀原则,把高筛选度字段放在索引靠前位置,避免索引失效。

联合索引字段数量不宜超过5个,字段越多索引体积越大,写入性能损耗会明显上升。

mysql索引类型:哈希索引

哈希索引基于哈希表实现,仅支持精确等值匹配,无法处理大于、小于这类范围查询,也不能用于排序操作。引擎会对索引字段计算哈希值,哈希冲突发生时,同哈希值的行会以链表形式存储。Memory引擎原生支持哈希索引,InnoDB有自适应哈希索引,由引擎自动维护,不能手动创建。单字段等值查询场景,哈希索引查找速度通常优于B+树,但字段重复值较多时,哈希冲突会大幅降低查询性能。

mysql索引类型:全文索引

全文索引用于长文本字段的关键词检索,支持中文分词需要额外配置ngram分词插件,能够匹配文本中包含指定词汇的数据行,区别于like%关键词%这种无法走普通索引的模糊查询。InnoDB和MyISAM都支持全文索引,单表最多可以创建64个全文索引,一个全文索引最多关联32个字段。全文索引不适合短字段匹配,字段内容偏短时,索引区分度偏低,检索结果的准确性会下降。

mysql索引类型:空间索引

空间索引专门用于几何类型字段,支持POINT、LINESTRING、POLYGON这类空间数据,依靠R树结构实现地理空间范围检索,适合点位距离计算、区域包含判断等地图业务。只有InnoDB和MyISAM支持空间索引,创建空间索引时,字段必须设置为NOTNULL,不能允许空值。普通业务表存储地址文本,不需要创建空间索引,空间索引维护成本高于B+树索引,写入数据开销更大。

mysql索引类型:索引对比

索引类型支持查询适用引擎主要局限
B+树索引等值、范围、排序、分组InnoDB、MyISAM范围查询会停止使用联合索引后续字段
哈希索引等值查询Memory,InnoDB自适应不支持范围、排序,存在哈希冲突
全文索引文本关键词检索InnoDB、MyISAM短文本区分度较差,有停用词过滤
空间索引空间几何范围查询InnoDB、MyISAM仅支持空间数据,维护成本较高

你可以通过explain命令查看SQL执行计划,type字段的值可以判断当前查询是否成功命中索引。type为ref代表命中普通二级索引,range代表走范围索引,ALL代表全表扫描没有使用索引,日常SQL优化都可以依靠这个方式验证索引是否生效。

索引不是越多越好,每次插入、更新、删除数据,数据库都要同步修改对应索引,索引数量过多会拖慢写入性能。一张业务表,索引总数建议控制在6个以内,避免大量写请求场景出现性能瓶颈。

对一个varchar类型字段建立B+树索引,直接使用select*fromtablewherecollike'%abc',前置百分号会让索引失效,触发全表扫描,这是开发中很常见的错误写法。

优先根据查询语句的过滤条件选择索引类型,绝大多数Web业务,只需要B+树索引就能覆盖绝大多数查询需求,其余索引类型只在对应专属场景启用。

敬慕百科汇集百科知识与游戏文化,带你发现世界的每一个精彩角落。

想要了解更多关于mysql索引类型有哪些的文章欢迎访问:百科