什么情况下适合创建索引?

本文探讨了何时创建索引以提升数据库性能,包括对唯一性约束、频繁查询字段、分组和排序、前缀索引、联合索引、更新操作及特定查询条件的应用。了解如何根据业务需求和技术特性合理构建索引。

什么情况下适合创建索引?

  • 字段的数据值有唯一性限制

  • 频繁最为where条件的字段

  • 经常被作用于group by 、order by后面的字段

  • distinct 的字段需要加索引

  • 对于字符串我们可以创建合适的前缀索引

  • 如果有多个字段要被操作,建议创建联合索引而非单列索引

  • 如果在update insert delete 后面要操作大量的数据,建议先不要创建索引,等操作完之后在创建索引,减少索引的维护降低性能

  • 选择散列度高的创建索引

  • 对于join … on condition where …

    对于多表查询,可以适当的在 where后面的字段创建索引,如果查询的还是慢,可以在on后面判断的字段上面创建索引

    前提是 字段类型一致

  • 选择列类型小的创建索引

  • 对于联合索引,选择最常使用的字段放在最左边

判断数据库中哪些字段适合创建索引可以从以下几个方面考量: - **字段离散度**:表的某个字段离散度越高,越适合选作索引的关键字。主键字段以及唯一性约束字段的值非常离散,适合选作索引的关键字。例如,在 MySQL 中,创建主键约束时会自动创建索引(primary index),创建唯一性索引时会自动创建唯一性索引(unique index)[^1]。 - **存储空间**:占用存储空间少且固定的字段更适合选作索引的关键字。与字符串相比,整数字段占用的存储空间较少;与 text 类型的字段相比,char 类型的字段较为适合选作索引关键字[^1]。 - **使用频率**: - **where 子句**:where 子句中经常使用的字段应该创建索引,这样可以加快过滤数据的速度。 - **分组与排序**:分组字段或者排序字段应该创建索引,能够提高分组和排序操作的效率。 - **连接字段**:两个表的连接字段应该创建索引,有助于提升表连接操作的性能。 - **更新与删除**:对数据按照某个条件进行查询后再进行 UPDATE 或 DELETE 操作时,若对 WHERE 字段创建索引,能大幅提升效率。若更新的字段是非索引字段,提升的效率会更明显,因为非索引字段更新不需要对索引进行维护[^4]。 - **表的特性**: - 表的主键、外键必须有索引。 - 数据量超过 300 的表应该考虑创建索引。 - 经常与其他表进行连接的表,在连接字段上应该建立索引。 - **复合索引**: - 正确选择复合索引中的主列字段,一般是选择性较好的字段。 - 复合索引的几个字段是否经常同时以 AND 方式出现在 Where 子句中,且单字段查询极少甚至没有,若是则可以建立复合索引;否则考虑单字段索引。 - 如果复合索引中包含的字段经常单独出现在 Where 子句中,则分解为多个单字段索引。 - 如果复合索引所包含的字段超过 3 个,需仔细考虑其必要性,考虑减少复合的字段。 - 如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引[^2]。 - **避免情况**:更新频繁的字段不适合创建索引,因为更新索引会带来额外的开销;不会出现在 where 子句中的字段不应该创建索引创建了也无法发挥作用。频繁进行数据操作的表,不要建立太多的索引,同时要删除无用的索引,避免对执行计划造成负面影响[^1][^2]。 ### 示例 SQL ```sql -- 创建单字段索引 CREATE INDEX idx_name ON users(name); -- 创建复合索引 CREATE INDEX idx_name_age ON users(name, age); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C_x_330

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值