慢sql优化-索引

【 TiDB 使用环境】生产环境
【 TiDB 版本】v7.5.5
【复现路径】慢sql优化
【遇到的问题:问题现象及影响】
如果判断某张表的某个字段适合建立索引呢?

凭经验 :smiley_cat:

数据量,查询条件并发,综合评估判断。

凭经验判断,判断不了的加上测试一下看那个更合适 :grinning:

看你们表设计啊,需要作为查询条件频繁查询的就要加索引

1 个赞

根据业务场景,常用到的,最好就加索引。但不要表里每个字段都加索引。

依据是该字段在数据库操作中的使用频率、字段值的数据分布、表大小、数据查询的性能需求以及索引带来的潜在开销。

大概以下情况,请对号入座。

1、如果一个字段的取值越分散(即唯一性越高),那么为这个字段建立索引的效果通常会更好。例如,性别字段通常只有两个取值(男、女),不适合建立索引;而像订单号这种几乎每个值都不同的字段,则非常适合建立索引。

2、如果一个字段经常用于查询(特别是在WHERE子句中),那么为其建立索引可能会显著提升查询性能。例如,根据用户ID查询用户信息的操作非常频繁,为用户ID字段建立索引通常是一个好主意。

3、如果一个字段的更新频率非常高,特别是在大规模并发情况下,为其建立索引可能会增加数据库的维护负担,甚至影响性能。因此,需要权衡更新操作和查询性能之间的平衡。

4、一般来说,索引的效率取决于字段的数据类型。数值型字段和日期字段通常比字符串字段效率高。

另外提一点,较大的字段,如大文本字段或者二进制字段,不适合建立索引,因为它们会占用较大的索引空间,且索引的效率可能会降低。

3 个赞

需要根据你sql的具体情况,在适合的字段添加索引。

还要经过测试,有些差的索引可能还会由于数据的变化失效

执行计划和业务需求

根据你的实际情况来看,如果你这个字段唯一性高,就适合做索引。或者你的业务物种经常会查询到这一个字段,也可以做索引。

根据字段的使用频率

除了上面几点外,还要考虑一次查询返回的结果集数据量和表数据量的占比,是否有排序操作(group by、order by、distinct等),以及索引加速的时间+回表的时间 是否比全表扫描时间更短。执行时间短才是王道。