索引的基本原理
- 80%的SQL问题可以通过索引解决
- 索引可以提高查询性能
- Insert/update/delete的空间消耗提高
B+Tree数据结构索引:MyIsam和InnoDB
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
- 尽量使用简单的数据做索引
- 查询尽量都走在索引上
- 使用最小子集作为索引
上面的内容是来源一次技术分享。听到最后的结果就是:大家如果都能合理的使用自己工具的最大力量的话。是可以做到很大的力量的。但是归根结底就是:用合适的工具做合适的事情。数据库做的就是数据存储和目录查询功能。不要做任何的拼接数据的业务逻辑的事情。