限制毎张表上的索引数量, 建议单张表索引不超过 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 加快查询效率
尽量避免使用外键
不建议使用外键约束, 但一定在表与表之间的关联键上建立索引
外键可用于保证数据的参照完整性, 但建议在业务端实现
外键会影响父表和子表的写操作从而降低性能