B+树能显著的减少IO次数,提高效率
B+树的查询效率更加稳定,数据放在叶子节点
B+树能提高范围查询的效率,因为叶子节点指向下一个叶子节点
B+树采取顺序读
列的离散度公式
count(distinct(column_name))/count(*)
列的全部不同值和所有数据行的比例。分子越大列的离散度就越高
联合索引最左匹配
最左意味以最左边的索引字段为条件基础进行的索引查询,如果条件中不带最左边的字段则联合索引不会生效,反之如果多个条件会在最左边的字段索引查询基础后再进行第二个字段条件的索引查询
覆盖索引与回表
不需要回表叫做覆盖索引
非主键索引,先通过索引找到主键索引的键值,再通过主键值查出索引里面没有的数据,比基于主键索引的查询多扫描了一颗索引树,这个过程叫做回表
在辅助索引里,不管单列索引还是联合索引,如果select的数据列只用从索引中就能够取得,不必从数据区中读取,这时候使用的索引就叫覆盖索引,避免了回表
1:索引的个数不要过多:浪费空间,更新变慢
2:区分度低的字段,不要建索引
3:频繁更新的值,不要作为主键或者索引:页分裂
4:随机无序的值,不建议作为主键索引,如:UUID:无需,分裂
5:创建复合索引,而不是修改单列索引
索引失效索引值不确定的情况
1:索引上使用函数、表达式
2:字符串不加引号,出现隐式转换
3:like条件中前面带%
4:负向查询notlike
MVCC
要让一个事务前后两次读取的数据保持一致,在修改数据的时候给他建立一个备份或者快照,后面再来读取这个快照就行这种方案叫做多版本并发控制(MultiVersionConcurrencyControl)
核心思想:可以查到在当前事务开始之前已经存在的数据,即使它在后面被修改或者删除了。
通过undolog实现
MVCC和锁是协同使用的用来实现隔离性的。