Mysql索引与优化

索引的基本原理

  • 80%的SQL问题可以通过索引解决
  • 索引可以提高查询性能
  • Insert/update/delete的空间消耗提高
  • B+Tree数据结构索引:MyIsamInnoDB

    mysql的Index都是走两次,先走一次PrimaryIndex,后走一个SecondIndex

索引选择的基本原理

1、选择区分度高的列建索引
2、根据实际情况,区分度低的列建立索引
3、索引列不参与计算
4、字段 Not Null
5、避免重复索引

主键选择的基本原则

1、采用一个没有业务用途的自增属性作为主键
2、主键字段值总是不更新,只有新增或者删除操作。
3、不选择动态更新的列做主键。比如时间戳等。
4、不选择UUID作为主键(Insert慢等)

最左前缀原则

   最左前缀原则顾名思义,就是最左优先,我们创建了多列索引,相当于创建了(a)单列索引,(a,b)组合索引以及(a,b,c)组合索引。

   注:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。

利用索引优化Order By

  • 索引本身是有序的,利用有序索引获取有序数据(Using Index)。
  • 使用索引来优化或者避免排序
  • 去掉不必要的返回字段
  • 增加maxlengthforsortdata来排序

索引和锁的关系

  • 查询不加锁
  • InnoDb行锁是通过给索引加上的索引项加锁实现的。不是针对记录加的锁。只有通过索引检查数据,才是行级锁,否则可能导致全表所有行被锁定。
  • 锁和隔离级别有密切的关系(RR or RC

总结

  • 避免使用UUID
  • 尽量使用简单的数据做索引
  • 查询尽量都走在索引上
  • 使用最小子集作为索引

上面的内容是来源一次技术分享。听到最后的结果就是:大家如果都能合理的使用自己工具的最大力量的话。是可以做到很大的力量的。但是归根结底就是:用合适的工具做合适的事情。数据库做的就是数据存储和目录查询功能。不要做任何的拼接数据的业务逻辑的事情。

    原文作者:MySql
    原文地址: https://juejin.im/entry/5954f5646fb9a06bab3d1736
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞