Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • KnowledgePlanet
  • docdoc
  • Issue
  • #42

doc
doc
  • 项目概览

KnowledgePlanet / doc

通知 1303
Star 822
Fork 117
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 42
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 0
  • DevOps
    • 流水线
    • 流水线任务
    • 计划
  • Wiki 2
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
doc
doc
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 42
    • Issue 42
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 0
    • 合并请求 0
  • Pages
  • DevOps
    • DevOps
    • 流水线
    • 流水线任务
    • 计划
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 2
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 流水线任务
  • 提交
  • Issue看板
已关闭
开放中
Opened 6月 18, 2024 by 小傅哥@Yao__Shun__Yu⛹Owner

mysql 索引规范建议

在 MySQL 中,索引的设计是一个非常重要的优化手段,能够显著提高查询性能。关于组合索引和单列索引的选择,确实需要考虑多方面的因素,包括查询模式、数据分布和最左匹配原则等。以下是一些设计索引的建议:

1. 了解最左匹配原则

最左匹配原则是指在使用组合索引时,查询条件必须从索引的最左边开始匹配,才能有效利用索引。例如,如果你有一个组合索引 (a, b, c),那么以下查询可以利用这个索引:

  • SELECT * FROM table WHERE a = 1;
  • SELECT * FROM table WHERE a = 1 AND b = 2;
  • SELECT * FROM table WHERE a = 1 AND b = 2 AND c = 3;

但是,以下查询不能完全利用这个索引:

  • SELECT * FROM table WHERE b = 2;
  • SELECT * FROM table WHERE b = 2 AND c = 3;

2. 组合索引 vs 单列索引

  • 组合索引:适用于多列经常一起出现在查询条件中的情况。组合索引可以减少索引的存储空间和维护开销,但需要遵循最左匹配原则。
  • 单列索引:适用于单列经常出现在查询条件中的情况。单列索引的灵活性更高,但在多列查询时可能需要 MySQL 进行索引合并,性能不如组合索引。

3. 索引设计策略

  • 分析查询模式:首先分析你的查询模式,找出最常用的查询条件和排序条件。
  • 选择合适的列:选择那些选择性高(即列的值比较分散)的列作为索引列。
  • 组合索引的顺序:在组合索引中,将选择性高的列放在前面,这样可以更有效地过滤数据。
  • 覆盖索引:如果某些查询只需要查询索引列中的数据,可以设计覆盖索引,这样查询可以直接从索引中获取数据,而不需要访问数据表。

4. 示例

假设有一个表 users,包含以下列:

  • id (主键)
  • first_name
  • last_name
  • email
  • created_at

常见的查询有:

  • 根据 email 查找用户
  • 根据 last_name 和 first_name 查找用户
  • 根据 created_at 排序

可以设计以下索引:

  1. 单列索引:

    CREATE INDEX idx_email ON users(email);
  2. 组合索引:

    CREATE INDEX idx_name ON users(last_name, first_name);
  3. 如果有查询需要根据 created_at 排序,可以创建单列索引:

    CREATE INDEX idx_created_at ON users(created_at);

5. 监控和优化

  • 使用 EXPLAIN:使用 EXPLAIN 语句来分析查询的执行计划,查看索引的使用情况。
  • 定期维护:定期检查和维护索引,删除不再使用的索引,避免索引过多导致的维护开销。

通过合理设计索引,可以显著提高 MySQL 的查询性能,但也需要权衡索引的维护成本和存储空间。希望这些建议对你有所帮助!

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: KnowledgePlanet/doc#42
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7