当前位置: 首页 > news >正文

mysql 索引

MySQL 索引是数据库中用于加速数据查询的一种数据结构。它类似于书籍的目录,通过预先建立特定列(或列组合)的索引,数据库可以快速定位到数据的位置,避免全表扫描,从而显著提升查询性能。

1. 索引的类型

1.1 按数据结构分类

  • B-Tree 索引(默认索引类型):

    • 适用于等值查询(=)和范围查询(><BETWEEN)。

    • 支持字符串前缀索引(如 INDEX (name(10)))。

    • 适用场景:大多数常规查询(如主键查询、普通字段查询)。

  • 哈希索引(Memory 引擎支持):

    • 仅支持等值查询(=),不支持范围查询。

    • 查询速度极快(时间复杂度接近 O(1))。

    • 适用场景:内存表(MEMORY 引擎)的快速等值查询。

  • 全文索引(FULLTEXT):

    • 用于文本字段的全文搜索(如 MATCH ... AGAINST)。

    • 支持自然语言和布尔模式搜索。

    • 适用场景:大文本字段的模糊匹配(如文章内容搜索)。

  • 空间索引(R-Tree):

    • 用于地理空间数据类型(如 GEOMETRYPOINT)。

    • 支持空间关系查询(如 ST_ContainsST_Distance)。

1.2 按逻辑功能分类

  • 主键索引(PRIMARY KEY):

    • 唯一且非空的索引,每个表只能有一个主键。

    • 默认按主键聚簇存储数据(InnoDB 引擎)。

  • 唯一索引(UNIQUE):

    • 确保列值的唯一性(允许 NULL 值)。

    • 可用于避免重复数据。

  • 普通索引(INDEX 或 KEY):

    • 无唯一性约束,仅用于加速查询。

  • 组合索引(多列索引):

    • 基于多个列的联合索引(如 INDEX (col1, col2))。

    • 遵循最左前缀原则(查询需包含索引最左列)。

 

2. 索引的创建与删除

2.1 创建索引

 

-- 单列普通索引
CREATE INDEX idx_name ON table_name (column_name);

-- 唯一索引
CREATE UNIQUE INDEX idx_unique_email ON users (email);

-- 组合索引
CREATE INDEX idx_name_age ON users (name, age);

-- 全文索引(仅适用于 TEXT 类型字段)
CREATE FULLTEXT INDEX idx_content ON articles (content);

2.2 删除索引 

DROP INDEX idx_name ON table_name; 

 

3. 索引的优缺点

优点
  1. 加速查询:显著减少 SELECT 操作的执行时间。

  2. 优化排序和分组:索引可加速 ORDER BY 和 GROUP BY

  3. 唯一性约束:唯一索引确保数据唯一性。

缺点
  1. 占用存储空间:索引需要额外的磁盘空间。

  2. 降低写操作速度INSERT/UPDATE/DELETE 需维护索引。

  3. 索引失效风险:不合理的索引设计可能导致索引未命中(如未遵循最左前缀原则)。

4. 索引的最佳实践

  1. 选择合适的列

    • 频繁作为查询条件的列(如 WHERE 子句中的列)。

    • 参与连接(JOIN)或排序(ORDER BY)的列。

  2. 避免过多索引

    • 每个索引都会增加写操作的开销,需权衡读写比例。

  3. 使用组合索引

    • 优先覆盖高频查询的多个条件。

    • 示例:INDEX (a, b) 可加速 WHERE a=1 AND b=2,但无法加速 WHERE b=2

  4. 注意前缀索引

    • 对长字符串字段(如 VARCHAR(255))使用前缀索引(如 INDEX (name(10)))。

  5. 监控索引使用情况

 -- 查看索引使用统计
SELECT * FROM sys.schema_index_statistics;

  • 核心作用:索引是提升查询性能的核心工具,但需合理设计。

  • 平衡策略:在查询速度和写操作开销之间找到平衡。

  • 分析工具:使用 EXPLAIN 分析查询执行计划:

 

相关文章:

  • 蓝桥杯嵌入式第十二届程序设计题
  • 海康gdb流程
  • 【算法题讲解】45. 跳跃游戏 II
  • 如何选择适合你的美颜SDK?人脸美型功能对比与应用场景分析
  • C语言中的位域:节省内存的标志位管理技术
  • CTF类题目复现总结-[MRCTF2020]ezmisc 1
  • 交流电机类型及其控制技术
  • 淘宝商品数据清洗实战:从复杂JSON到结构化数据库(附Python脚本)
  • LeeCode 434. 字符串中的单词数
  • Spring Initializr搭建spring boot项目
  • 软件工程面试题(七)
  • 格雷码和汉明码的详细总结
  • Linux中安装宝塔面板
  • vcruntime140.dll丢失导致程序无法运行?八种vcruntime140高效修复方案详解
  • 记录一次交易耗时有毛刺TDSQL数据库排查过程
  • 生物化学笔记:医学免疫学原理08 细胞因子+细胞因子的种类+细胞因子与疾病
  • 【网络】Socket套接字
  • 地图项目入手学习
  • SQL 复杂查询和性能优化
  • 2025美国网络专线国内服务商推荐
  • 投资者网站建设/神马推广
  • 湛江北京网站建设/厦门人才网个人会员登录
  • 连接器零售在什么网站做/怎样在百度上发布自己的文章
  • 做外贸有哪些好的免费b2b网站/网络营销的成功案例有哪些
  • 北京建设工程交易信息网站/搭建一个app平台需要多少钱
  • 网站轮播图能用什么软件做/百度搜索seo