Mysql设计索引的原则

设计索引的原则

  • 搜索的索引列,不一定是索要选择的列

最适合索引是出现在where子句中的列,或链接子句中指定的列,而不是出现在select关键字后的选择列表中的列。

  • 使用唯一索引

索引的列的基数越大,索引的效果越好
比如 性别 M 和 F 对此索引没有多大用处,因为不管搜索那个值,都会得出大约一半的行

  • 使用短索引

如果对字符串列进行索引,应该制定一个前缀长度,只要有可能就应该这样做。较小的索引设计的磁盘IO较少,较短的值比较起来更快。

  • 利用最左前缀

在创建一个n列的索引时,实际是创建了MYSQl可利用的n个索引。多列索引可起几个索引的作用,因为可以利用索引中最左边的列集来匹配行。这样的列集成为最左前缀

  • 不要过度索引

每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能。在修改表的内容是,缩影必须进行更新,有时可能需要重构,因此,索引越多,所花费的时间越长。

  • 对于innodb存储引擎的表

记录默认会按照一定的顺序保存,
如果有明确定义的主键,则按照主键保存。
如果没有主键,但是有唯一索引,那么就按照唯一索引的顺序保存。
如果既没有主键又没有唯一索引,那么表中会自动生成一个内部列,按照这个顺序保存。
按照主键或者内部列进行的访问时最快的,所以innodb表尽量自己制定主键,当表中同时几个列都是唯一的,都可以作为主键的时候,要选择最常作为访问条件的列作为主键,提高查询效率。

另外,innoDB表的普通索引都会保存主键的键值,所以主键要尽可能的选择较短的数据类型,可以有效减少索引的磁盘占用,提高索引的缓存效果。