问答

一个数据库表的字段只有两个值且一个值得记录数目很少,做索引有

作者:admin 2021-08-03 我要评论

假设如下两种做法: 调用某个远程接口前,先入库一条记录,内容是远程接口调用的内容,以及状态,状态为INIT,调用远程接口成功,状态设为FINISHED,不成功不改...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

假设如下两种做法:

调用某个远程接口前,先入库一条记录,内容是远程接口调用的内容,以及状态,状态为INIT,调用远程接口成功,状态设为FINISHED,不成功不改变状态。然后定时任务定时捞取状态为PENDING的记录,重试调用。

另一种做法是调用某个远程接口前,先入库一条记录,内容是远程接口调用的内容,调用远程接口成功,将该记录删除,不成功不删除,定时任务定时捞取,重试调用,同样,成功删除,不成功不删除。

感觉后者对数据库性能更好,即便前者对状态做索引,因为状态只有两个值,而PENDING状态的记录数目一般不打,导致B+树结构完全FINISHED状态那边臃肿,感觉性能不太好吧?

###

根据你的描述,将会有很多记录处于 FINISHED 状态,这对于处理 INITPENDING 记录的业务场景来说,并没有什么影响。唯一要注意的就是任何 SQL 语句如果带了 status='FINISHED'status in ('FINISHED',...),这样的条件,就一定要注意避免大规模排序。

什么意思呢,一个典型场景就是订单记录,已完成的订单通常占据 99.999% 的记录量,而且查询的时候通常都会按照时间排序,这样的查询就需要额外优化,极端情况下甚至不允许在 MySQL 里面查,而是同步到 ES 或其他地方。

###

只有两种值的字段不应该加索引

###

数据记录,低于1000条左右,就没必要加索引……

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 一个数据库表的字段只有两个值且一个值

    一个数据库表的字段只有两个值且一个值

  • 如何让input  type="file"里的字竖排

    如何让input type="file"里的字竖排

  • spring boot读数据库后才能继续创建bea

    spring boot读数据库后才能继续创建bea

  • 使用 prettier 格式化 vue 单文件组件

    使用 prettier 格式化 vue 单文件组件

腾讯云代理商
海外云服务器