MySQL索引

MySQL索引是数据库中用于提高数据检索速度的重要机制。以下是MySQL中常见的索引类型详解:

1. 按数据结构分类

B+Tree索引

  • 特点:MySQL默认索引类型,适用于全键值、键值范围和键前缀查找
  • 应用场景:大多数查询场景,特别是范围查询和排序操作
  • 存储引擎支持:InnoDB、MyISAM等

Hash索引

  • 特点:基于哈希表实现,只适用于等值查询
  • 优势:等值查询速度极快,时间复杂度O(1)
  • 限制:不支持范围查询和排序操作
  • 存储引擎支持:Memory存储引擎默认使用

Full-text索引

  • 用途:用于全文搜索
  • 支持操作:MATCH AGAINST操作,支持自然语言搜索
  • 适用场景:大文本字段的搜索,如文章内容搜索
  • 存储引擎支持:MyISAM和InnoDB(5.6版本后)

2. 按物理存储分类

聚集索引(Clustered Index)

  • 定义:数据行按索引键值的顺序存储,表数据本身即索引
  • 特点 :
    • 每个表只能有一个聚集索引
    • 叶子节点存储完整的数据行
    • InnoDB中主键就是聚集索引
  • 优势:按主键访问数据时速度最快

非聚集索引(Secondary Index)

  • 定义:索引结构与数据分开存储
  • 特点 :
    • 叶子节点存储索引键值和对应的主键值
    • 需要回表查询获取完整数据
    • 一个表可以有多个非聚集索引

3. 按功能逻辑分类

主键索引(Primary Key)

  • 特点:唯一标识表中每一行记录,不允许重复和NULL值
  • 创建方式 :在创建表时通过PRIMARY KEY定义
  • 作用:保证数据唯一性,提高查询效率

唯一索引(Unique Index)

  • 特点:索引列的值必须唯一,但允许有空值
  • 创建方式 :使用UNIQUE关键字创建
  • 用途:保证数据唯一性约束

普通索引(Normal Index)

  • 特点:最基本的索引类型,没有任何限制
  • 用途:提高查询效率,无唯一性约束

组合索引(Composite Index)

  • 定义:多个字段组合创建的索引
  • 最左前缀原则:查询条件必须包含最左边的字段才能使用索引
  • 优势:减少索引数量,提高查询效率

4. 特殊索引类型

空间索引(Spatial Index)

  • 用途:用于地理空间数据类型
  • 支持类型:GEOMETRY、POINT、LINESTRING等
  • 操作支持:空间函数查询

前缀索引

  • 用途:对字符串字段的前缀创建索引
  • 优势:节省存储空间,提高索引效率
  • 创建方式 :指定前缀长度,如INDEX(column_name(prefix_length))

5. 索引选择建议

  • 频繁查询字段:为经常出现在WHERE子句中的字段创建索引
  • 连接字段:为JOIN操作的字段创建索引
  • 排序字段:为ORDER BY字段创建索引
  • 避免过多索引:索引会占用存储空间并影响写入性能
  • 定期维护:定期分析和优化索引使用情况

合理使用索引可以显著提高MySQL查询性能,但需要根据实际查询模式和数据特点来选择合适的索引类型。

相关推荐
李兆龙的博客4 小时前
问津集 #26:Lakebase——Postgres 的版本化页面存储、数据库分支与计算弹性
数据库
倔强的石头_6 小时前
聊聊金仓KFS:一款把数据同步软件做扎实的产品
数据库
闲云野鹤在人间6 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
禾小西6 小时前
Redis:从两大维度和三大主线建立知识体系
数据库·redis·缓存
禾小西7 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
数据库小学妹8 小时前
数据共享交换平台选型:交换方式对比与避坑指南
数据库·信创·数据同步·数据交换平台·政务数据共享·数据共享交换平台·数据库底座
要开心吖ZSH8 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
loong_XL9 小时前
决策模型做内容安全检测:从踩坑到上线
数据库·安全·jev·决策模型
这个DBA有点耶9 小时前
数据库双轨并行实战:全量并行策略、增量延迟控制、双向回切与一致性校验
数据库·架构·dba
Gl�ria10 小时前
MySQL 单机版 vs 高可用版:宕机排查 + 故障处理
mysql·adb·架构