MySQL 查询优化选择最佳索引

本文探讨了如何为MySQL查询选择最佳索引,包括遵循的经验规则和避免的常见错误。创建复合索引时,应优先考虑与等号比较的列,然后是范围列,再是GROUP BY和ORDER BY子句中的列。同时,应避免每个列单独索引,以及在索引中使用OR条件。正确的索引顺序至关重要,避免冗余索引以保持数据库性能。
摘要由CSDN通过智能技术生成

本教程关注的重点是 MySQL、MariaDB 和 PerconaDB 数据库。这些信息也可能与其他数据库供应商有关,但在某些情况下可能不会。

我应该为我的 SQL 查询创建哪些索引?

根据通常的经验规则,当尝试优化你的 SQL 查询时,你可以依照以下步骤构建复合索引:

  1. 首先列出你的查询中所有使用的表,并为查询中的每个子查询创建一个独立的列表。如果你有一个包含 2 个 SELECT 子查询的 SELECT 查询,那你应该建立 3 个列表,每个列表包含引用在其中的表。
  2. 在此过程结束时,你可能会在每个查询列表中为每个这些表添加一个列的列表。
  3. 在你的任何索引中最左边的列应与查询相等比较(如 age = 25)中的列匹配。
  4. 你可以添加多个列,只要所有列与常量进行比较相等即可。
  5. 那么,你应该选择一个列,这将是“范围列(range column)”。MySQL 在每个索引中只支持一个范围列。
  6. 因此,你应该使用范围运算符(<>, >, <, IN(), BETWEEN, LIKE)来查看所有的比较,并选择可以过滤最多行数的那个。
  7. 将该列给该表添加为你的索引中的下一列。
  8. 你可以在这里获得一些信息 —— 关于在范围列之前添加相等列的理由(幻灯片由一位 MySQL 优化团队的成员编写)。
  9. 如果查询中不存在范围列,你可以添加 GROUP BY 子句中的列。
  10. 如果查询中不存在范围列,并且没有 GROUP BY 子句,则可以添加 ORDER BY 子句中的列。
  11. 在某些情况下,创建一个独立的索引来保存 ORDER BY 子句的列是有意义的,因为 MySQL 有时会选择使用它。请注意࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值