Mysql设计索引的原则
Mysql设计索引的原则
Alex设计索引的原则
- 搜索的索引列,不一定是索要选择的列
最适合索引是出现在where子句中的列,或链接子句中指定的列,而不是出现在select关键字后的选择列表中的列。
- 使用唯一索引
索引的列的基数越大,索引的效果越好
比如 性别 M 和 F 对此索引没有多大用处,因为不管搜索那个值,都会得出大约一半的行
- 使用短索引
如果对字符串列进行索引,应该制定一个前缀长度,只要有可能就应该这样做。较小的索引设计的磁盘IO较少,较短的值比较起来更快。
- 利用最左前缀
在创建一个n列的索引时,实际是创建了MYSQl可利用的n个索引。多列索引可起几个索引的作用,因为可以利用索引中最左边的列集来匹配行。这样的列集成为最左前缀
- 不要过度索引
每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能。在修改表的内容是,缩影必须进行更新,有时可能需要重构,因此,索引越多,所花费的时间越长。
- 对于innodb存储引擎的表
记录默认会按照一定的顺序保存,
如果有明确定义的主键,则按照主键保存。
如果没有主键,但是有唯一索引,那么就按照唯一索引的顺序保存。
如果既没有主键又没有唯一索引,那么表中会自动生成一个内部列,按照这个顺序保存。
按照主键或者内部列进行的访问时最快的,所以innodb表尽量自己制定主键,当表中同时几个列都是唯一的,都可以作为主键的时候,要选择最常作为访问条件的列作为主键,提高查询效率。
另外,innoDB表的普通索引都会保存主键的键值,所以主键要尽可能的选择较短的数据类型,可以有效减少索引的磁盘占用,提高索引的缓存效果。