Mysql基础知识之索引设计规范

作者: JONE 分类: PHPer 发布时间: 2020-08-24 22:31

限制毎张表上的索引数量,建议单张表索引不超过5个

索引并不是越多越好!索引可以提高效率同样可以降低效率

索引可以增加查询效率,但同样也会降低插入和更新的效率

禁止给表中的每一列都建立单独的索引

 

每个 innodb表必须有一个主键

不使用更新频繁的列作为主键(值变了索引的排序也会跟着变),不使用多列主键(联合索引)
不使用UuD,MD5,HASH字符串列作为主键
主键建议选择使用自增ID值

 

常见索引列建议

SELECT、 UPDATE、 DELETE语句的 WHERE从句中的列
包含在 ORDER BY、 GROUP BY、 DISTINCT中的字段
多表JON的关联列

 

如何选择索引列的顺序

区分度最高的列放在联合索引的最左侧
尽量把字段长度小的列放在联合索引的最左侧
使用最频繁的列放到联合索引的左侧

 

避免建立冗余索引和重复索引

例:在id列上建立主键,索引,唯一索引,就是重复索引,primary key(id)、 index〔id)、 unique index(id)
例:在a列上建立多个联合索引  index(a,b,c)、 index(a,b)、 index(a)

 

对于频繁的查询优先考虑使用覆盖索引

覆盖索引:就是包含了所有查询字段的索引
避免 innodb表进行索引的二次查找
可以把随机变为顺序IO加快查询效率

 

尽量避免使用外键

不建议使用外键约束,但一定在表与表之间的关联键上建立索引
外键可用于保证数据的参照完整性,但建议在业务端实现
外键会影响父表和子表的写操作从而降低性能