找回密码
 立即注册
首页 业界区 安全 Spring Boot 3.x 整合AI大模型实战:手把手带你接入Deep ...

Spring Boot 3.x 整合AI大模型实战:手把手带你接入DeepSeek API

零幸 5 小时前
前言

MySQL索引是数据库性能优化的核心,掌握索引原理和优化技巧是后端开发的必备技能。本文从原理到实战,带你全面掌握MySQL索引优化。
一、索引是什么?

索引类似书的目录,帮助MySQL快速定位数据,避免全表扫描。
索引类型:

  • 主键索引:数据行的物理存储顺序
  • 唯一索引:允许NULL,不允许重复值
  • 普通索引:基本的索引类型
  • 联合索引:多列组合索引
  • 全文索引:用于文本搜索
二、B+树原理

MySQL使用B+树作为索引结构:

  • 非叶子节点只存储键值和指针
  • 叶子节点存储所有数据
  • 叶子节点形成双向链表,方便范围查询
三、10个优化技巧

技巧1:最左匹配原则
  1. -- 联合索引 (a, b, c)
  2. -- 有效查询
  3. WHERE a = 1
  4. WHERE a = 1 AND b = 2
  5. WHERE a = 1 AND b = 2 AND c = 3
  6. -- 无效查询
  7. WHERE b = 2  -- 不满足最左匹配
  8. WHERE c = 3
复制代码
技巧2:避免索引列计算
  1. -- 索引失效
  2. WHERE YEAR(create_time) = 2024
  3. -- 优化为
  4. WHERE create_time >= '2024-01-01' AND create_time < '2025-01-01'
复制代码
技巧3:避免索引列函数
  1. -- 索引失效
  2. WHERE LOWER(name) = 'zhangsan'
  3. -- 优化为
  4. WHERE name = 'zhangsan' OR name = 'ZHANGSAN'
复制代码
技巧4:避免隐式类型转换
  1. -- phone字段是VARCHAR,索引失效
  2. WHERE phone = 13800138000
  3. -- 优化为
  4. WHERE phone = '13800138000'
复制代码
技巧5:避免SELECT *
  1. -- 只查询需要的列,利用覆盖索引
  2. SELECT id, name FROM user WHERE name = 'zhangsan'
复制代码
技巧6:LIKE优化
  1. -- 索引失效
  2. WHERE name LIKE '%zhang%'
  3. -- 可用索引
  4. WHERE name LIKE 'zhang%'
复制代码
技巧7:OR改UNION
  1. -- 索引可能失效
  2. WHERE a = 1 OR b = 2
  3. -- 优化为UNION
  4. SELECT * FROM t WHERE a = 1
  5. UNION
  6. SELECT * FROM t WHERE b = 2
复制代码
技巧8:使用EXPLAIN分析
  1. EXPLAIN SELECT * FROM user WHERE name = 'zhangsan'
  2. -- 关注:type(ALL/const/ref/range/index)、key(实际使用的索引)、rows(扫描行数)
复制代码
技巧9:小表驱动大表
  1. -- 小表驱动大表
  2. SELECT * FROM small_table s
  3. INNER JOIN large_table l ON s.id = l.sid
复制代码
技巧10:定期分析和优化表
  1. ANALYZE TABLE user;
  2. OPTIMIZE TABLE user;
复制代码
四、索引失效场景汇总


  • 索引列参与计算
  • 索引列使用函数
  • LIKE以%开头
  • OR前后列都有索引但类型不同
  • 隐式类型转换
  • != 或  比较
  • IS NULL / IS NOT NULL(取决于数据分布)
总结

掌握索引优化技巧,可以让数据库查询性能提升10倍甚至更多。记住:索引不是越多越好,要根据实际查询场景设计。
本文由AI辅助创作。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册