mysql索引规范

 

 

索引并不是越多越好!索引可以提高查询效率,但会降低增删改效率。但多了甚至会降低查询效率。

Innodb是按照主键索引的顺序来组织表,如没有建立主键,mysql会选择第一个非空唯一索引做为主键,或生成一个占6个字节的主键,自动生成的主键性能并不是最好的,所以建立表时最好明确建立一个主键:

  1、不使用更新频繁的列为主键,不使用联合索引作为主键,否则会降低性能

  2、不使用UUID,MD5,HASH,字符串作为主键,无法保证数据自动增长

  3、主键建议选择使用自增ID值

常见索引列建议:

  select、update、delete语句的where从句中列建立索引

  包含在order by 、group by、distinct中的字段

  多标Join的关联列

复合索引列的顺序:

  区分度最高的列放在联合索引的最左侧

  尽量把字段长度小的列放在联合索引的最左侧

  使用频繁的列放到联合索引的左侧

 

严格控制索引的数量,避免建立冗余索引和重复索引,如:

冗余索引,index(a,b,c),index(a,b),index(a)

重复索引,primary key(id),index(id),unique index(id)

 

对于频繁的查询优先考虑使用覆盖索引,避免Inonodb表进行索引的二次查找,可以把随机IO变为顺序IO加快查询效率

覆盖索引:就是包含了所有查询字段的索引

 

尽量避免使用外键约束,但一定在表与表之间的关联键上建立索引

外键可以用于保证数据的参照完整性,但建议在业务端实现

外键会影响父表和子表的写操作从而降低性能

  

posted @ 2019-04-16 23:58  成杭君  阅读(191)  评论(0编辑  收藏  举报