面试官:说说你设计索引的原则

  • 设计索引的列最好是where字句中的列或者连接字句中指定的列,而不是那些被搜索出来,要作为结果的列

  • 为那些经常需要排序,分组以及联合操作的列建立索引

  • 使用唯一索引,不过只有当列的重复值越少,索引的效果才越好,所以如果列值都是惟一的,那效果就是最好的,反例就是为性别这个字段建立索引,性别只有男和女,建立了索引也加快不了多少速度,因为不管搜索哪个值,大约都会得到一半的行

  • 当要建立索引的字段太长时,可以建立短索引,比如说,有个CHAR(255) 的列,经过观察,发现它前10个字符重复的概率不大,很有辨识度,所以就可以为字段的前10个字符创建索引,而且这样还节省了索引空间,查询速度也可能更快

  • 数据量小的表就不要建立索引了,索引的创建就是为了优化查询的速度,数据量小的表,本来查询就不会太慢,即使加了索引,优化也不会很明显,如果为数据量小的表建立索引,维护索引结构的代价反而会更大

  • 索引不是越多越好,不要过度索引,每个额外的索引都会占用额外的磁盘空间,同时如果表中的数据发生更改时,索引也要进行相应的调整和更新,而这时候,索引越多,花费的时间就越长,会影响表的修改速度。更深一点的说法是,Mysql会生成一个执行计划,这个步骤会计算I/O和CPU成本,然后选择成本较小的方案来执行,因为执行计划不一定就是很准确,如果再加上这么多的索引的干扰,很可能导致Mysql选择到一个错误的索引

  • 设计索引要考虑最左前缀匹配原则

  • 如果经常使用多个条件查询时,建议使用组合索引代替多个单列索引

  • 索引不是创建了就不用再修改,要根据情况,删除那些使用频率低甚至不再使用的索引,免得无关的索引继续影响着表的修改速度

  • 如果是给大表加索引,尽量选择在业务不繁忙时候,避免线上环境更新表时受到影响

  • 尽量的扩展索引,而不是新建索引。

发布了297 篇原创文章 · 获赞 311 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/105215533