一、mysql 表中如果是单主键的话,那这个主键也会被 系统默认建为 索引
二、mysql 表中如果是复合主键的话,那系统会遵循左对齐原则,即如复合主键 a 和 b字段和c字段..., 默认建的主键索引是abc即主键全有,把所有主键全部建立在一个单独的主键索引中。那只有条件中有a的话这个索引才会命中,条件中如果不带a,只带b或其他的都不会命中索引,即主键索引都不起作用。由于a字段是在b字段前,索引遵循左对齐规则,只会把a默认作为比较对象,条件中只有带a才会命中,查询中如 where a=? 或 where a=? and b=? 这2种 查询条件中只要有a就会用到主键索引,即a、ab、abc、a... 只要有a就会用到索引,而 b、bc、bd、bcd、cd、... 条件中只要没有a的都没有用到索引,查询的话就会很慢,索引要么在条件中把a带上,要么把条件中的b或者c等 也单独 建个索引。
三、如果建立一个单独的索引,但索引中包含多个字段,那默认索引也是第一个字段有效,规则同二种所述。如:
CREATE INDEX idx_1 ON player_con_record
(
a
b
c
);
上边建的单独的索引包含 a、b、c 三个字段,但其实查询时条件中只有拥有a的情况下才会索引命中,即只有a才会起效果,如果条件中没有 a 只有 b和c,则上边索引 “idx_1”不起作用的,即规则同上边二,只有ab、ac、abc三者上班的 idx_1 才会命中起效果。至于 上边 idx_1 的b 和c 是不是冗余的,估计应该不是的
如果觉得《mysql 主键 默认索引_mysql 主键和默认 设为索引的规则》对你有帮助,请点赞、收藏,并留下你的观点哦!