mysql组合索引创建

用户表里常用到SELECT id,status FROM eoc_user where id=:id AND status=1 limit 1这样的查询。
id=1 AND status=1 这样的应该建立组合索引么

阅读 5.8k
10 个回答

从实际场景出发 , 结合数据量 , 然后充分利用explain多做几次执行计划 , 才会有谱 .
如果也就个几千几万的量 , 不加看起来也没什么问题 .
除此之外 , 就是你这个status的状态值有几种 , 假如只有0和1两种 , 索引的效果或许( 我是说或许 )不会有那么好 , 多说无意 , 自己做点儿数据跑跑测试吧 .

是的,这样建组合索引很适合,但是如果表数据不多的话,就不太有必要,很可能还没有全表扫描的快。

一般习惯上id都是主键吧,主键就相当于唯一索引。对于你上面的情况,如果id字段有索引,那就不用再增加一个id+status的组合索引了

如果id已经是主键,就不需要和status做组合索引了。

新手上路,请多包涵

根据数据分布情景来决定是否来建立索引,id为主键一般不建议和其他字段建立组合索引

新手上路,请多包涵

要看数据量大小

组合索引建立完成使用的时候,一定按照建立索引的顺序使用,否则所以不起作用。

首先,这里的 id 应该是主键吧?
然后是否适合可以考虑几个问题:

  1. 这个表的数据量时什么量级?
  2. status 类型是 int 吧? 其值是否为有限可枚举的?
  3. 生产环境中,此处是否是瓶颈?线上库执行很慢么?

一般来看,这种情况是没必要建 组合索引 的,因为 索引 维护也是有成本的,会降低插入的效率。
而且如果 id 本身为主键唯一,查询的速度就已经很快了。

首先要看数据量大小

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题