是否需要为频繁更新的列创建索引?
是否需要为频繁更新的列创建索引?
咱们先拆解下你的场景:表T最多也就1000行,两种高频操作各占一半——一种是找C最小的行加N,另一种是按主键找行减N。针对这个情况,我不建议给T.C创建索引,原因如下:
- 表规模太小,全表扫描成本可以忽略:1000行的数据量对数据库来说完全是小case,哪怕每次找最小C都做全表遍历,速度也快得离谱,根本不会成为性能瓶颈。
- 索引维护的开销会大于查询收益:两种操作都要修改C的值,而索引是依赖C的排序的——每次C变了,数据库都得调整索引的结构来维持有序性。由于两种操作频率相同,更新C的次数非常多,这种索引维护的额外开销,会远超过它给“找最小C”带来的那点速度提升。
- 第二种操作完全不受影响:按主键查找的操作,本身就依赖主键自带的索引(数据库默认会给主键建索引),有没有C的索引对它的效率都没影响。
简单说,对你这个场景而言,建索引纯属“画蛇添足”,反而会拖慢更新操作的速度。
备注:内容来源于stack exchange,提问作者ababo
相关产品推荐
相关产品推荐

